Node.js UDP流

时间:2014-11-09 06:28:34

标签: php node.js sockets udp

我试图将一些代码从PHP“移植”到Node中,并且我正在努力寻找如何让它工作。我也尝试通过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

2 个答案:

答案 0 :(得分:1)

将字符串传递给Buffer构造函数的默认编码不是binary,因此您需要将二进制文件作为编码传递:new Buffer('\xFF' + password, 'binary')。第一个0xFF字节导致默认utf8编码问题。另外,另一个区别是您在节点中使用0xFF,而在PHP中使用0x45

答案 1 :(得分:0)

socket.bind接受端口和可选主机。您正在提供端口0。

我不确定您想听哪个端口,但为了示例,我将使用888.

socket.bind(888);