![](/img/trans.png)
[英]NodeJs - how to use socket.io to send tcp packet to another computer in local area network
[英]NodeJS how to send a TCP packet with raw Hex
我是 node 的新手,并试图编写发送原始十六进制数据的最小 tcp 客户端。 如果我应该使用缓冲区,那么如何使用? 如果我可以将十六进制作为字符串发送,那么如何发送? 非常感谢指导!
继承人当前的,不工作的代码:
var hexVal = `504f5354202f6c696e653320485454502f312e310d0a557365722d4167656e743a206e6f64652d6170700d0a4163636570743a202a2f2a0d0a686f73743a203139322e3136382e31342e39343a333030300d0a636f6e74656e742d747970653a206170706c69636174696f6e2f6a736f6e0d0a636f6e74656e742d6c656e6774683a2031390d0a436f6e6e656374696f6e3a20636c6f73650d0a0d0a227b757365726e616d653a202776616c277d22` // my raw hex, unwantendly sent as string
var net = require('net');
var HOST = '192.168.14.94';
var PORT = 3000;
var client = new net.Socket();
client.connect(PORT, HOST, function() {
console.log('CONNECTED TO: ' + HOST + ':' + PORT);
client.write(hexVal);
});
client.on('data', function(data) { // 'data' is an event handler for the client socket, what the server sent
console.log('DATA: ' + data);
client.destroy(); // Close the client socket completely
});
// Add a 'close' event handler for the client socket
client.on('close', function() {
console.log('Connection closed');
});
服务器:
nc -lvp 3000
这解决了它:
var bytesToSend = [0x50, 0x4f, ...],
hexVal = new Uint8Array(bytesToSend);
给定一个十六进制字符串,将它作为原始字节发送,有一种更方便的方法可以做你想做的事。
目前,您正在使用Uint8Array
,其中每个字节都需要编码为0x41
或其他Uint8Array
。
但是,给定一个十六进制字符串,您可以像这样准备一个原始的十六进制缓冲区:
const hexString = "41424344";
const rawHex = Buffer.from(hexString, 'hex');
然后你可以将缓冲区写入套接字:
let client = new net.Socket();
client.connect(PORT, IP, () => {
console.log("Connected");
client.write(rawHex); //This will send the byte buffer over TCP
})
希望这可以帮助
你需要先设置服务器!!!
然后只有这样客户端才能连接到它......
var net = require('net');
var config = {
host: 'localhost',
port: 3000
};
// var hexVal = `POST /line3 HTTP/1.1
// User-Agent: node-app
// Accept: */*
// host: 192.168.14.94:3000
// content-type: application/json
// content-length: 19
// Connection: close
// "{username: 'val'}"`
var hexVal = `504f5354202f6c696e653320485454502f312e310d0a557365722d4167656e743a206e6f64652d6170700d0a4163636570743a202a2f2a0d0a686f73743a203139322e3136382e31342e39343a333030300d0a636f6e74656e742d747970653a206170706c69636174696f6e2f6a736f6e0d0a636f6e74656e742d6c656e6774683a2031390d0a436f6e6e656374696f6e3a20636c6f73650d0a0d0a
227b757365726e616d653a202776616c277d22` // my raw hex, unwantendly sent as string
var move = {
forward: hexVal,
backward: 'READER_BWD'
};
///////////////////////////////////////////////////////////////////////////////////
/* server code */
let server = net.createServer((client) => {
console.log('client connected');
client.on('data', data => {
console.log(data.toString());
client.write('ACK')
})
client.on('end', () => console.log('ended session'))
})
server.listen(3000)
//////////////////////////////////////////////////////////////////////////////
/* client code */
var client = new net.Socket();
client.connect(3000, 'localhost', function () {
console.log('connected to ' + config.host + ':' + config.port);
client.write(move.forward, function () {
console.log('move forward command sent');
});
});
client.on('data', function (data) {
var str = data.toString();
if (str === 'ACK') {
console.log('ACK received');
client.write(move.backward, function () {
console.log('move backward sent');
client.end();
});
}
});
client.on('end', () => {
console.log('disconnected from server');
});
client.on('error', function (err) {
console.log('Error : ', err);
});
client.on('close', function () {
console.log('socket closed');
});
您甚至可以将服务器和客户端的代码拆分为两个单独的文件...
然后先启动服务器,然后启动客户端
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.