Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как опросить игровой сервер

51K
16 августа 2009 года
leporel
5 / / 16.08.2009
Помогите написать маленький мониторинг, в сетевом программировании практически не разбираюсь

Вот что есть
http://developer.valvesoftware.com/wiki/Server_Queries - протокол сервера
http://www.codeproject.com/KB/game/gameser...Quick&fr=26 - пример с исходниками (не с++)
http://forum.sources.ru/index.php?showtopi...mp;view=showall - тема про опрос на делфи
http://www.serverquery.com/files/query19402b-src.zip - исходники для VC++ 6
http://www.securitylab.ru/analytics/216301.php - некоторое описание на русском (тоже для делфи вроде)


и нашел вот такой кусок кода который сканирует диапазон

Код:
//$$---- Form CPP ----
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char ip[20];
for(int i = 1; i < 255; i++)
{
sprintf(ip,"%s%d","10.10.110.",i);
Label1->Caption = ip;
IdUDPServer1->SendBuffer(ip,27015,"яяяяinfostring\0",15);  
::Sleep(5);
Application->ProcessMessages();
IdUDPServer1->SendBuffer(ip,27015,"яяяяTSource Engine Query\0",25);
::Sleep(5);
Application->ProcessMessages();
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender, TStream *AData,
     TIdSocketHandle *ABinding)
{
char buff[300];
for(int i=0;i < AData->Size;i++)
{
AData->ReadBuffer(&buff,sizeof(buff));
if (buff == 0) {buff = '@';}
}
buff[AData->Size] =  0;
Memo1->Lines->Add(buff);
Memo1->Lines->Add(ABinding->PeerIP);
Memo1->Lines->Add(ABinding->PeerPort);  
}
//---------------------------------------------------------------------------



Но только в 2010 билдере нету таких функций у AData, а на IdUDPServer1 ругается.
51K
23 февраля 2010 года
leporel
5 / / 16.08.2009
ап! тема актуальна
51K
24 февраля 2010 года
leporel
5 / / 16.08.2009
если делать вот так
Код:
int Timeout = 1000;
   if (IdUDPClient1->Active)
   IdUDPClient1->Active = false;
   IdUDPClient1->Host = "css.corbina.net";
   IdUDPClient1->Port = 27015;
   IdUDPClient1->Active = true;

   IdUDPClient1->SendBuffer(RawToBytes("яяяяTSource Engine Query",25));
   String Answer;
   try
   {

      Answer = IdUDPClient1->ReceiveString(Timeout);
      Memo1->Lines->Add(Answer);

   }
   catch(EIdSocketError&)
   {
      ;
   };


Приходит только строка типа "I ---- C S S . C O R B I N A . N E T ---- # 1" где отображается только название сервера
51K
24 февраля 2010 года
leporel
5 / / 16.08.2009
если делать вот так
Код:
int Timeout = 1000;
   if (IdUDPClient1->Active)
   IdUDPClient1->Active = false;
   IdUDPClient1->Host = "css.corbina.net";
   IdUDPClient1->Port = 27015;
   IdUDPClient1->Active = true;

   IdUDPClient1->SendBuffer(RawToBytes("яяяяTSource Engine Query",25));
   String Answer;
   try
   {

      Answer = IdUDPClient1->ReceiveString(Timeout);
      Memo1->Lines->Add(Answer);

   }
   catch(EIdSocketError&)
   {
      ;
   };



Приходит только строка типа "I ---- C S S . C O R B I N A . N E T ---- # 1" где отображается только название сервера
51K
25 февраля 2010 года
leporel
5 / / 16.08.2009
если делать вот так
Код:
int Timeout = 1000;
   if (IdUDPClient1->Active)
   IdUDPClient1->Active = false;
   IdUDPClient1->Host = "css.corbina.net";
   IdUDPClient1->Port = 27015;
   IdUDPClient1->Active = true;

   IdUDPClient1->SendBuffer(RawToBytes("яяяяTSource Engine Query",25));
   String Answer;
   try
   {

      Answer = IdUDPClient1->ReceiveString(Timeout);
      Memo1->Lines->Add(Answer);

   }
   catch(EIdSocketError&)
   {
      ;
   };


Показывается строка типа "I ---- C S S . C O R B I N A . N E T ---- # 1" где отображается только название сервера
Как её разобрать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог