我试图将一些代码从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
答案 0 :(得分:1)
将字符串传递给Buffer
构造函数的默认编码不是binary
,因此您需要将二进制文件作为编码传递:new Buffer('\xFF' + password, 'binary')
。第一个0xFF字节导致默认utf8
编码问题。另外,另一个区别是您在节点中使用0xFF
,而在PHP中使用0x45
。
答案 1 :(得分:0)
socket.bind
接受端口和可选主机。您正在提供端口0。
我不确定您想听哪个端口,但为了示例,我将使用888.
socket.bind(888);