Тема: WinSock
Показать сообщение отдельно
  #1  
Старый 19.08.2009, 10:00
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию WinSock

Начал разбираться с WinSock, для "самообучения" решил написать простой сервер...
Код:
program Server;

{$APPTYPE CONSOLE}

uses
  Windows,
  WinSock;

var
  WSAData: TWSAData;
  s,clnt: TSocket;
  inaddr,addrfrom: sockaddr_in;
  Terminated:boolean;
  len:integer;

function IntToStr(i:integer):string;
var
  s:string;
begin
  str(i,s);
  Result:=s;
end;

begin
  writeln('running...');
  if WSAStartup($101,WSAData)<>0 then begin
    writeln('Error WSAStartup '+IntToStr(WSAGetLastError()));
  end;
  writeln('started...');
  s:=socket(AF_INET,SOCK_STREAM,0);
  if s<0 then begin
    writeln('Error socket '+IntToStr(WSAGetLastError()));
  end;
  writeln('sock init...');
  inaddr.sin_family:=AF_INET;
  inaddr.sin_port:=htons(666);
  inaddr.sin_addr.S_addr:=INADDR_ANY;
  if bind(s,inaddr,sizeof(inaddr))>0 then begin
    writeln('Error bind '+IntToStr(WSAGetLastError()));
  end;
  writeln('binded...');
  if listen(s,SOMAXCONN)>0 then begin
    writeln('Error listen '+IntToStr(WSAGetLastError()));
  end;
  writeln('Listening port 666...');
  Terminated:=false;
  while not Terminated do begin
    clnt:=accept(s,@addrfrom,@len);
    writeln('connected '+IntToStr(clnt));      //<===
  end;
  writeln('sock close...');
  closesocket(s);
  writeln('cleanup...');
  WSACleanUp;
  writeln('terminated...');
  sleep(10000);
end.
В итоге получаю толпу вывода "connected -1" (выводит помеченная строчка).
Где у меня ошибка? (Только не говорите "в ДНК", ламерами все были в той или иной области, все учатся )
Яндекс юзал, нашёл статью "Игры на WinSock", по Сишным примерам понял основное, НО...
Кстати, какую инфу посоветуете почитать?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием