![](/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.