Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реализация на стороне игры


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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо