【发布时间】:2019-12-22 06:28:20
【问题描述】:
我正在尝试将图像数据从我的 TCP 客户端发送到我的 TCP 服务器,两者都是用 node.js 编写的
我已经尝试过这样做
客户:
function onData(socket, data) {
var data = Buffer.from(data).toString()
var arg = data.split(',')
var event = arg[0]
console.log(event)
if (event == 'screenshot') {
console.log(hostname)
console.log('control client uid ' + arg[1] + 'then we screenshot')
screenshot()
.then(img => {
console.log(img)
socket.write('screenshotData,' + ',' + hostname + ',' + img)
socket.write('stdout,' + arg[2] + ',Screenshot')
})
.catch(err => {
console.log(err)
socket.write('error', err)
})
}
}
服务器:
sock.on('data', function(data) {
//right here i need to parse the first 'EVENT' part of the text so i can get cusotom tcp events and
var data = Buffer.from(data).toString()
var arg = data.split(',')
var event = arg[0]
if (event == 'screenshotData') {
agentName = arg[1]
img = arg[2]
console.log('agent-name ' + agentName)
console.log('screnshotdata' + img)
var dt = dateTime.create()
var formattedTime = dt.format('Y-m-d-H-M-S')
var folder = 'adminPanel/screenshots/'
var filename = formattedTime + '-' + agentName + '.png'
console.log(filename)
fs.writeFile(folder + filename, img, function(err) {
console.log(err)
})
}
})
我不得不在 TCP 中构建一些基本的事件系统。如果您知道更好的方法,请告诉我。无论如何,客户端截取屏幕截图然后它会执行socket.write('screenshotData', + ',' + hostname + ',' img)。
但它以多个块的形式发送数据,因为我的控制台多次将随机乱码显示为新事件,所以我什至不知道该怎么做。任何帮助都会很棒。
【问题讨论】:
-
您需要通过附加来重新组装缓冲区,检测它何时完成,并确保您的 img 不能包含您的 ',' 分隔符,或者最好使用长度指示符。 stackoverflow.com/a/57517507/1269466
标签: javascript node.js image sockets tcp