![]() |
|
#3
|
||||
|
||||
![]() Ура, работает! Забыл инициализировать переменную
Код:
len:=sizeof(addrfrom); Сейчас буду делать парсер HTTP заголовков, потом прикручу настройки, авто-перезагрузку через определённое в настройках время... короче, "фантики". Прилагаю, что есть сейчас: Код:
program Server; {$APPTYPE CONSOLE} uses Windows, WinSock, MainThread in 'MainThread.pas'; var WSAData: TWSAData; s,clnt: TSocket; inaddr,addrfrom: sockaddr_in; Terminated:boolean; len:integer; procedure ParseNewConnection(client_socket:TSocket); var sock : TSocket; buff : array [0..25523] of char; bytes_recv : Integer; begin sock := client_socket; buff := 'hi'; repeat bytes_recv := recv(sock, buff, 1024, 0); if (bytes_recv = 0)or(bytes_recv<1024) then Break; until false; WriteLn(buff); buff:='HTTP/1.1 200 OK'#10+ 'Content-length: 5'#10+ ''#10+ 'Hello'; send(sock, buff, Length(buff), 0); Writeln('Disconnect'); closesocket(sock); end; function IntToStr(i:integer):string; var s:string; begin str(i,s); Result:=s; end; begin writeln('running...'); if WSAStartup($202,WSAData)<>0 then begin writeln('Error WSAStartup '+IntToStr(WSAGetLastError())); exit; end; writeln('started...'); s:=socket(AF_INET,SOCK_STREAM,0); if s<0 then begin writeln('Error socket '+IntToStr(WSAGetLastError())); exit; end; writeln('sock init...'); inaddr.sin_family:=AF_INET; inaddr.sin_port:=htons(666); inaddr.sin_addr.S_addr:=0; if bind(s,inaddr,sizeof(inaddr))<>0 then begin writeln('Error bind '+IntToStr(WSAGetLastError())); exit; end; writeln('binded...'); if listen(s,$100)<>0 then begin writeln('Error listen '+IntToStr(WSAGetLastError())); exit; end; writeln('Listening port 12345...'); Terminated:=false; len:=sizeof(addrfrom); while not Terminated do begin clnt:=accept(s,@addrfrom,@len); writeln('Connected'); ParseNewConnection(clnt); end; writeln('sock close...'); closesocket(s); writeln('cleanup...'); WSACleanUp; writeln('terminated...'); sleep(10000); end. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |