Node.js UDPstream

我试图“移植”一些代码从PHP到节点和im努力找出如何得到它的工作。 我试图通过UDP连接到RCON服务器。 以下是PHP版本的简化版本:

$address = '1.2.3.4:1234'; $password = 'password'; $socket = stream_socket_client('udp://' . $address, $errno, $errstr); stream_set_blocking($socket, 0); $loginRequest = chr(0x45) . $password; stream_socket_sendto($socket, $loginRequest, 0, $address); echo 'RCON Login Request Sent' . PHP_EOL; echo $loginRequest . PHP_EOL; echo PHP_EOL; do { $data = stream_socket_recvfrom($socket, 127, 0, $address); } while (!$data); echo 'RCON Received Response' . PHP_EOL; echo $data . PHP_EOL; 

这是我在Node中得到的,它似乎没有做任何事情。 我什至不知道从服务器连接的任何确认。

 var address = '1.2.3.4'; var port = '1234'; var password = 'password'; var socket = require('dgram').createSocket('udp4'); socket.on('message', function (msg, from) { console.log(msg); }); socket.on('listening', function () { var loginPacket = new Buffer(String.fromCharCode(0xff) + password); socket.send(loginPacket, 0, loginPacket.length, port, address, function (err, bytes) { console.log('packet sent'); }); }); socket.on('error', function (err) { console.log('ERROR: ', err); }); socket.bind(0); 

任何帮助,这将是伟大的! maca134

将string传递给Buffer构造函数的默认编码不是binary ,所以你需要传递binary作为编码: new Buffer('\xFF' + password, 'binary') 。 第一个0xFF字节会导致默认的utf8编码问题。 另外,另一个区别是你在节点中使用0xFF ,而你在PHP中使用0x45

socket.bind需要一个端口和可选的主机。 你正在提供端口0。

我不确定你想听哪个端口,但为了举例,我将使用888。

 socket.bind(888);