Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к серверу Counter-Strike 
:(
    Опции темы
newgigabyte
Дата 16.2.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 10.1.2008

Репутация: нет
Всего: 2



Пишу программу для получения информации игроках на сервере
немного погуглил и нашел что для получения информации о игроках надо посла udp пакет с следующей информацией
Код

0xFF,0xFF,0xFF,0xFF,0x7370 ,0x6C ,0x61 ,0x79 ,0x65 ,0x72 ,0x73


так и пишу 
Код

DatagramSocket Socket=new DatagramSocket();
String querty=new String(new byte[]{(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0x7370 ,(byte)0x6C ,(byte)0x61 ,(byte)0x79 ,(byte)0x65 ,(byte)0x72 ,(byte)0x73});
byte[] date=querty.getBytes();
DatagramPacket pack = new DatagramPacket(date, date.length, InetAddress.getByName("localhost"), 27015);
Socket.send(pack);
Socket.receive(pack);
System.out.println(new String(pack.getData()));


и в ответ я ничего не получаю... что не так???
--------------------
PM MAIL   Вверх
AlexeyVorotnikov
Дата 17.2.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 1
Всего: 18



Во-первых, зачем вы преобразуете массив байтов в строку, а потом строку обратно в массив байтов? Такие преобразования могут происходить с потерями и искажениями данных.
Во-вторых, сервер работает непосредственно на вашем компьютере? Если нет, то вместо localhost надо писать адрес сервера.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
newgigabyte
Дата 17.2.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 10.1.2008

Репутация: нет
Всего: 2



1. сори, один вариант программы, но без этого не работает
2. ну уж..это я знаю=)

и ещё один момент не понимаю: на каком порту ловить ответ???
на том с которого посылал??
--------------------
PM MAIL   Вверх
AntonSaburov
Дата 17.2.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 2
Всего: 118



Цитата(newgigabyte @  17.2.2009,  18:45 Найти цитируемый пост)
на том с которого посылал?? 

Как это не забавно - вполне возможно, что нет.
PM MAIL WWW ICQ   Вверх
newgigabyte
Дата 17.2.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 10.1.2008

Репутация: нет
Всего: 2



есть код на php

Код

<?php
if(!function_exists('getmicrotime'))
{
    function getmicrotime() 
    { 
        list($usec, $sec) = explode(" ", microtime()); 
        return ((float)$usec + (float)$sec); 
    }
}
function serverInfo($ip, $port)
{
    $ip = gethostbyname($ip);
    $timeStart = getmicrotime();
    $fp = fsockopen('udp://'.$ip, $port);
    stream_set_timeout($fp, 2); 
    if($fp) 
    { 
        fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\0\r");
        $temp = fread($fp, 4);
        $status = socket_get_status($fp); 
        if($status['unread_bytes']>0) 
        {
            $temp = fread($fp, $status['unread_bytes']);
            $server['ping'] = (int)((getmicrotime() - $timeStart)*1000);
            $array = array(); 
            $pos = 0; 
            while($pos !== false) 
            { 
                $pos2 = strpos($temp, "\0", $pos+1); 
                $array[] = substr($temp, $pos+1, $pos2-$pos)."\n"; 
                $pos = $pos2; 
            }
            $server['status'] = 'on';
            if( strpos($array[0], $ip) !== 0) 
            { 
                $server['players'] = ord($array[5][0]); 
                $server['maxplayers'] = ord($array[5][1]); 
                $server['name'] = trim(substr($array[0], 1)); 
                $server['map'] = trim($array[1]); 
                $server['game'] = trim($array[2]);
            } 
            else 
            { 
                $server['players'] = ord($array[5][0]); 
                $server['maxplayers'] = ord($array[5][1]); 
                $server['name'] = trim($array[1]); 
                $server['map'] = trim($array[2]);
                $server['game'] = trim($array[3]);
            }
            $command = pack("V", -1) . 'W';
            fwrite($fp, $command, strlen($command));
            $temp = fread($fp, 1500);
            $temp = substr($temp, 5);
            $lo = (ord($temp[1]) << 8) | ord($temp[0]);
            $hi = (ord($temp[3]) << 8) | ord($temp[2]);
            $data = "\xFF\xFF\xFF\xFF\x55".pack("V", ($hi << 16) | $lo);
            fwrite($fp, $data);
            $temp = fread($fp, 5);
            $status = socket_get_status($fp);
            if($status['unread_bytes']>0) 
            {
                $temp = fread($fp, $status['unread_bytes']);
                $array = array();
                $temp = substr($temp, 1);
                for($i=1;$i<=$server['players'];$i++)
                {
                    $temp = substr($temp, 1);
                    $pos = strpos($temp, "\0");
                    $name = substr($temp, 0, $pos);
                    $temp = substr($temp, $pos+1);
                    $lo = (ord($temp[1]) << 8) | ord($temp[0]);
                    $hi = (ord($temp[2]) << 8) | ord($temp[3]);
                    $temp = substr($temp, 4);
                    $kills = ($hi << 16) | $lo;
                    $f = @unpack("f1float", $temp);
                    $temp = substr($temp, 4);
                    $time = (int)$f['float'];
                    if(trim($name))
                        $server['stats'][] = array("name" => $name, "kills" => $kills,
                                                   "time" => gmdate("H:i:s", $time));
                }
            }
        }
        else
            $server['status'] = 'off';
    }
    return $server;
}

print_r(serverInfo("game.arbital.ru", 27018));
?>


может по этому вы сможете мне помочь???
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.