Hallo, ich wollte mal eine http request ohne Komponenten machen und habe mit folgenden kleinen Code zusammengebastelt:
Das Problem ist, dass das Programm bei der Abarbeitung von Zeile 42 (bytesrecv:=recv(sock,buf2,40,0)
"hängen" bleibt
(Bsp.: wenn ich Breakpoints auf 42 und 43 setze, wird auf 42 gebreakt und wenn ich dann fortfahre breakt das Programm nie mehr). An dem minimalen http Header kann es nicht liegen, denke ich (hab ihn auch mit telnet gechecked). Der cast mit hostinf ist auch in Ordnung, soweit ich mit dem debugger erkennen kann. ?( Ich hoffe ihr könnt mir sagen wo mein Fehler ist
.
Gruss
Vallani
PS: Mir ist klar, das das Proggie soweit keinen Sinn ergibt, da mit den empfangenen Daten nichts gemacht wird. Es geht mir erstmal einfach ums Prinzip.
Code:
program sockethttp;
{$APPTYPE CONSOLE}
uses
SysUtils,winsock,windows;
var
sock:tsocket;
sockaddr:tsockaddr;
wsa:wsadata;
buf:pchar;
bytessend,bytesrecv:integer;
buf2:array[1..1024] of char;
hostinf:Phostent;
begin
if WSAStartup(MAKEWORD(1, 1), wsa)<>0 then exit;
Sock := Socket(AF_INET,SOCK_STREAM,0);
if sock=INVALID_SOCKET then
begin
wsagetlasterror;
exit;
end;
sockaddr.sin_port:=htons(80);
sockaddr.sa_family:=af_inet;
hostinf:=gethostbyname('www.google.de');
sockaddr.sin_addr.S_addr:=Longint(PLongint(Hostinf.h_addr_list^)^);
if connect(sock,sockaddr,sizeof(sockaddr))=Socket_Error then wsagetlasterror
else
begin
buf:='GET / HTTP/1.1'
+#13#10+'Host: www.google.de'
+#13+#10+#13+#10+#0;
bytessend:=send(sock,buf,length(buf),0);
if bytessend=Socket_Error then
begin
wsagetlasterror;
exit;
end
else
begin
repeat
bytesrecv:=recv(sock,buf2,40,0);
until bytesrecv=Socket_Error;
end;
end;
closesocket(sock);
WSAcleanup;
end.
Das Problem ist, dass das Programm bei der Abarbeitung von Zeile 42 (bytesrecv:=recv(sock,buf2,40,0)
Gruss
Vallani
PS: Mir ist klar, das das Proggie soweit keinen Sinn ergibt, da mit den empfangenen Daten nichts gemacht wird. Es geht mir erstmal einfach ums Prinzip.