Показать сообщение отдельно
  #1 (permalink)  
Старый 14.08.2011, 14:25
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сокеты в 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 рабочая.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 14.08.2011 в 14:33.
Ответить с цитированием