//$$---- 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);
}
//---------------------------------------------------------------------------
Как опросить игровой сервер
Вот что есть
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 - некоторое описание на русском (тоже для делфи вроде)
и нашел вот такой кусок кода который сканирует диапазон
Код:
Но только в 2010 билдере нету таких функций у AData, а на IdUDPServer1 ругается.
ап! тема актуальна
Код:
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&)
{
;
};
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" где отображается только название сервера
Код:
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&)
{
;
};
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" где отображается только название сервера
Код:
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&)
{
;
};
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" где отображается только название сервера
Как её разобрать?