Показать сообщение отдельно
  #4  
Старый 16.05.2011, 09:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну там и без него можно разобраться.
для поиска серверов отправляем широковещательный 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.

только, как я уже писал, для какого это протокола не помню. да и не в этом суть...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием