ну там и без него можно разобраться.
для поиска серверов отправляем широковещательный udp:
IdUDPServer1.Broadcast(#255#255#255#255'TSource Engine Query'#0,
27015);
затем в OnUDPRead у IdUDPServer ловим ответы всех найденых серверов.
Код:
unit Unit1;
interface
uses
IdSocketHandle,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer;
type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
MemoServers: TMemo;
Button1: TButton;
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
c: Char;
s: String;
begin
MemoServers.Lines.Add(ABinding.PeerIP+':'+IntToStr(ABinding.PeerPort));
while AData.Read(c, 1)<>0 do if (c>=#32) and (c<=#255) then s:=s+c;
MemoServers.Lines.Add(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
//var
// data: array of Char;
// s: String;
begin
IdUDPServer1.Broadcast(#255#255#255#255'TSource Engine Query'#0, 27015);
{
IdUDPServer1.DefaultPort:=27015;
s:=#255#255#255#255'TSource Engine Query'#0;
SetLength(data, Length(s));
StrPCopy(@data[0], s);
IdUDPServer1.SendBuffer('10.4.84.102', 27015, data[0], Length(data));
}
end;
end.
только, как я уже писал, для какого это протокола не помню. да и не в этом суть...