![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реализация на стороне игры
Dr.Nemo © (2005-08-01 14:19:00)поток не работает
Dr.Nemo (2005-08-01 15:36:00) [1]Str := Arena('view', true); // для получения списка серверов
мне нужно для получения списков серверов
GLFox (2005-08-01 15:18:00) [2]Memo.Lines.Add(Arena('ping', false));
Dr.Nemo (2005-08-01 15:14:00) [3]Добрые старейшены вы мне не сможите подсказать чтоб результат ответа выводился в Memo
GLFox (2005-08-01 14:46:00) [4]if get and (Result <> '') then
Alexander Panov (2005-08-01 14:45:00) [5]ПОльзуйся скобками. Это ж просто:
if (get) and (Result <> '' )
Dr.Nemo (2005-08-01 14:43:00) [6]function Arena(const mode: string; get: boolean): string;
const
host = 'host.ru';
port = 25666;
var
wData : WSADATA;
addr : sockaddr_in;
sock : integer;
error : integer;
buf : array [0..1023] of Char;
str : string;
phe : PHostEnt;
begin
//Инициализация сокета
Result := '';
WSAStartup($0101, wData);
phe := gethostbyname(PChar(string(host)));
if phe = nil then
begin
WSACleanup;
Exit;
end;
sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock = INVALID_SOCKET then
begin
WSACleanup;
Exit;
end;
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
addr.sin_addr := PInAddr(phe.h_addr_list^)^;
error := connect(sock, addr, sizeof(addr));
if error = SOCKET_ERROR then
begin
closesocket(sock);
WSACleanup;
Exit;
end;
// Составляем строку запроса
str := 'GET http://' + host + '/?action=arena&mode=' + mode;
if mode = 'ping' then
str := str + '&port=' + IntToStr(port);
str := str + ' HTTP/1.0'#13#10#13#10;
// отправляем
send(sock, str[1], Length(str), 0);
// Если нужен ответ то принимаем
if get then
begin
ZeroMemory(@buf, 1024);
error := recv(sock, buf, 1024, 0);
while error > 0 do
begin
Result := Result + Copy(buf, 0, error);
error := recv(sock, buf, 1024, 0);
end;
end;
// Закрываем сокет – завершаем работу с сетью
closesocket(sock);
WSACleanup;
// Вырезаем из ответа то что нам нужно, т.е. отрезаем HTTP заголовки
(на этом месте) if get and Result '' then
Result := Copy(Result, pos(#13#10#13#10, Result) + 4, Length(Result));
end;
----------------------------------
при компеляции выдаёт Incompatible types: 'String' and 'Boolean'
GLFox (2005-08-01 14:24:00) [7]function Arena_PingThread(pParam: Pointer): Integer; stdcall;
Dr.Nemo (2005-08-01 14:20:00) [8]procedure Arena_PingThread;
begin
Arena('ping', false);
end;
procedure Arena_Ping;
var
id : DWORD;
begin
CreateThread(nil, 128, @Arena_PingThread, nil, 0, id);
end;