Registriert seit: 9. Aug 2003
389 Beiträge
Delphi 7 Professional
|
Re: Die IP-Adresse vor dem Router mit Winsockets ermitteln
6. Apr 2005, 18:45
drei Dinge sind mir aufgefallen:
- jedes mit socket() geöffnete Socket muss irgendwann mit closesocket() wieder geschlossen werden, so dass Windows die zugehörigen Resourcen freigeben kann.
- bei HTTP 1.1 kann der Server nach eigenem Ermessen Persistent-Connection verwenden und die Connection erst nach einem Timeout schliessen: sicherheitshalber würde ich den Request folgendermassen erweitern:
opHost := 'GET / HTTP/1.1'+#13#10+'Host: '+opHost+#13#10+'Connection: close'+#13#10#13#10;
- der Loop zum Empfangen der Antwort wäre besser so:
Delphi-Quellcode:
while true do begin
i := recv(lSocket, recvbuf[0], length(recvbuf) - 1, 0);
if not (i > 0) then break; // connection geschlossen oder Error
recvbuf[i]:=#0;
IpAddr := IPAddr + recvbuf;
end;
sleep ist nicht notwendig, da recv blockiert, wenn keine Daten bereit sind
recv gibt 0 zurück, wenn Connection "normal" geschlossen wurde, oder <0 bei Fehler.
|
|
Zitat
|