Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Сокеты в NodeJS (https://javascript.ru/forum/server/20703-sokety-v-nodejs.html)

B~Vladi 14.08.2011 14:25

Сокеты в NodeJS
 
Проблема вот в чем.
Пытаюсь настроить общение NodeJS с удаленным демоном (сервер CS 1.6) через сокеты по протоколу UDP.
Если честно, раньше работать с сокетами не приходилось, может я чего-то не до понимаю.

Демон поддерживает такие запросы, вот дока.

У меня родился вот такой код:
function(data){
	var message = new Buffer('\xff\xff\xff\xffTSource Engine Query\x00');
	/*
	* Пробовал и так:
	* var message = '\xff\xff\xff\xffTSource Engine Query\x00';
	**/
	var client = LIBS.dgram.createSocket('udp4');
	client.on('message', function(data){
		console.log(data);
	});
	client.on('error', function(error){
		console.log(error);
	});

	client.send(message, 0, message.length, 27015, 'cs-console.ru');
}


Судя по документации, в Node работать с сокетами на UDP может только либа dgram.
Собственно, создаем сокет, вешаем обработчики, шлем запрос, а в ответ тишина. Т.е. событие message не наступает.
Может я чего-то упустил, может запрос неверный.
Сам демон запущен. Вот рабочий пример реализации такого общения на PHP:
//send info command
    $command = "\xff\xff\xff\xffTSource Engine Query\x00";

    //write command on socket
    fputs($this->socket, $command, strlen($command));

    //get results from server
    $buffer = fread ($this->socket, 1);
    $status = socket_get_status($this->socket);

    // Sander's fix:
    if ($status["unread_bytes"] > 0) {
    	$buffer .= fread($this->socket, $status["unread_bytes"]);
    }
    // Далее идет парсинг ответа

Помогите, я уже не знаю что ещё можно покрутить :(

UPD: На всякий случай скажу, что родной тест test-dgram-udp4.js отрабатывает на ура, поэтому либа dgram рабочая.

B~Vladi 14.08.2011 17:08

Проблема решена:
var message = new Buffer('\xff\xff\xff\xffTSource Engine Query\x00', 'ascii');

wgol 24.09.2011 13:23

Подскажи плиз а как ловить ответ сервака ?

Magneto 24.09.2011 15:10

Верно, при создании буффера из строки, если кодировка не указана то используется utf-8.


Часовой пояс GMT +3, время: 17:09.