Ура, работает! Забыл инициализировать переменную
сделал пародию на HTTP сервер - работает.
Сейчас буду делать парсер 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.