Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: Die IP-Adresse vor dem Router mit Winsockets ermitteln

  Alt 6. Apr 2005, 17: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.
  Mit Zitat antworten Zitat