Winsock funktioniert nur einmal

cesupa

Erfahrenes Mitglied
Hallo,

ich hab heute versucht eine Winsock Anwendung zu schreiben, mit der ich aber immer nur einmal zu einem Server konatktieren kann, dann muss ich den Computer neustarten.
Ich hab aber Null ahnung woran das liegen könnte.

Code:
if((WSAStartUp($101,wsa))<>0)then
     begin
     showmessage('WSA funktioniert nicht' + inttostr(WSAGetLastError()));
     end
     else
     begin
     showmessage('WSA funktioniert');
     end;

  s:=winsock.socket(AF_INET,SOCK_STREAM,0);
  if(s=INVALID_SOCKET)then
  begin
  showmessage('Fehler beim Socket erstellen');
  end
  else
  begin
  showmessage('Socket erstellt');
  end;
  
  addr.sin_family:=AF_INET;
  addr.sin_port:=htons(80);
  addr.sin_addr.S_addr:=inet_addr('127.0.0.1');

  if((winsock.connect(s,addr,sizeof(TSockaddr)))=SOCKET_ERROR)then
  begin
      showmessage('Kein Kontakt!');
      end
      else
      begin
      showmessage('Kontakt hergestellt!');
      end;

      winsock.closesocket(s);
      WSACleanup();

Das ist meine Verbindungsroutine.
Kann aber eben nur das erste mal zu einem Server kontaktieren, um noch einmal zu einem Server zu kontakten muss ich den PC neustarten.

Danke für eure Hilfe.

Gruß
cesupa
 
Mich würde zunächst interessieren, wieso du eine IP-Verbindung aufbauen willst. Wieso nicht TCP? Mit IP kannst du so ziemlich gar nichts anfangen, es sei denn, du willst hier dein eigenes Transmission-Protokoll proggen. Das wäre aber eher was für Profis ;) Daher mein Vorschlag, zunächst mal ein TCP-Socket zu erstellen:
Code:
s:=winsock.socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
Der Wert 0 bedeutet -- keine Ahnung, ob du das weißt -- IPPROTO_IP.

Ein guter Rat: Verwende mal die Konstanten, die dafür vorgesehen sind. Du trägst an manchen Stellen Zahlen ein. Das macht keinen Sinn und ist fehleranfällig. In dieser Zeile:
Code:
if((WSAStartUp($101,wsa))<>0)then
würde ich an deiner Stelle auf NO_ERROR prüfen und nicht auf 0, sonst weiß niemand, was du meinst.

Wird denn überhaupt die Verbindung korrekt beendet, nachdem sie aufgebaut wurde?

-Gawayn
 
Zurück