![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте!
Ищу исходник програмы показывающий как ожно опрашивать cs 1.6 сервер. Либо сервер cs:source. Если такойе есть, поделитесь пожалуйста. Заранее благодарен! |
|
#2
|
||||
|
||||
|
|
|
#3
|
|||
|
|||
|
уже смотрел. сылка на сырец не пашет. Смотрю доки по запросам к серверу. Я не имею понятия как их посылать....
Допусти как проверит что сервер жив? как посталь тот же Цитата:
Последний раз редактировалось Человек_Борща, 16.05.2011 в 09:25. |
|
#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.только, как я уже писал, для какого это протокола не помню. да и не в этом суть... |
|
#5
|
|||
|
|||
|
Допустим а если сервера по указаному порту не существует? как это определить?
Определяет что сервер только работает. А вот что он не работает, программа не пишет. Код:
procedure TForm1.ConnectBtnClick(Sender: TObject);
var
data: array of Char;
s: String;
begin
UPD.Broadcast(#255#255#255#255'TSource Engine Query'#0, 27020);
UPD.DefaultPort:=27020;
s:=#255#255#255#255'TSource Engine Query'#0;
SetLength(data, Length(s));
StrPCopy(@data[0], s);
UPD.SendBuffer('10.1.22.95', 27020, data[0], Length(data));
end;
procedure TForm1.UPDUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
c: Char;
s: String;
begin
//LogBox.lines.Add(ABinding.PeerIP+':'+IntToStr(ABinding.PeerPort));
s:='';
while AData.Read(c, 1)<>0 do if (c>=#32) and (c<=#255) then s:=s+c;
if not (s = '') then
LogBox.lines.Add('Сервер работает!') else LogBox.lines.Add('Сервер не отвечает!');
end;
procedure TForm1.UPDStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
LogBox.Lines.Add(AStatusText);
end; |
|
#6
|
||||
|
||||
|
ну так если сервер не ответит значит он и не работает
![]() |