Текущий архив: 2006.01.08;
Скачать: CL | DM;
ВнизРеализация на стороне игры Найти похожие ветки
← →
Dr.Nemo (2005-08-01 14:19) [0]поток не работает
← →
Dr.Nemo (2005-08-01 14:20) [1]procedure Arena_PingThread;
begin
Arena("ping", false);
end;
procedure Arena_Ping;
var
id : DWORD;
begin
CreateThread(nil, 128, @Arena_PingThread, nil, 0, id);
end;
← →
GLFox © (2005-08-01 14:24) [2]function Arena_PingThread(pParam: Pointer): Integer; stdcall;
← →
Dr.Nemo (2005-08-01 14:43) [3]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"
← →
Alexander Panov © (2005-08-01 14:45) [4]ПОльзуйся скобками. Это ж просто:
if (get) and (Result <> "" )
← →
GLFox © (2005-08-01 14:46) [5]if get and (Result <> "") then
← →
Dr.Nemo (2005-08-01 15:14) [6]Добрые старейшены вы мне не сможите подсказать чтоб результат ответа выводился в Memo
← →
GLFox © (2005-08-01 15:18) [7]Memo.Lines.Add(Arena("ping", false));
← →
Dr.Nemo (2005-08-01 15:36) [8]Str := Arena("view", true); // для получения списка серверов
мне нужно для получения списков серверов
Страницы: 1 вся ветка
Текущий архив: 2006.01.08;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c