Node.js UDP Stream

Я пытаюсь «перенести» некоторый код из PHP в Node и пытаюсь выяснить, как заставить его работать. Я пытаюсь подключиться к серверу RCON через UDP.
Вот упрощенная версия версии 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

Решение

Кодировка по умолчанию для передачи строки в Buffer конструктор не binaryтак что вам нужно передать двоичный код в качестве кодировки: new Buffer('\xFF' + password, 'binary'), Первый байт 0xFF вызывает проблемы со значением по умолчанию utf8 кодирование. Кроме того, еще одно отличие заключается в том, что вы используете 0xFF в узле, тогда как вы используете 0x45 в PHP.

1

Другие решения

socket.bind занимает порт и необязательный хост. Вы поставляете порт 0.

Я не уверен, какой порт вы хотите слушать, но для примера я буду использовать 888.

socket.bind(888);
0

По вопросам рекламы [email protected]