![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#4
|
||||
|
||||
![]() ну там и без него можно разобраться.
для поиска серверов отправляем широковещательный 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. только, как я уже писал, для какого это протокола не помню. да и не в этом суть... Пишу программы за еду. __________________ |