Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Netzwerk-Broadcast mit Win.-API

  Alt 24. Feb 2008, 11:20
recv kann man nehmen, aber recvfrom ist für UDP besser geeignet. Dadurch erfährst du auch, von wem das Päckchen gekommen ist.

Und du hast auch richtig bemerkt, das recv (und auch recvfrom) per default blockierend ist. Das heißt, die Funktion kehrt erst zurück, wenn sie auch etwas empfangen hat (also etwas im Puffer des Sockets liegt). du kannst das Socket natürlich auf nichtblockierend schalten, aber der Ansatz mit der Message ist auch super. Du musst den Befehl WSAAsyncSelect aufrufen. Damit kannst du ein Windowhandle festlegen, an das eine Message gesendet wird, wenn Daten empfangen werden (nebenbei wird dein Socket dadurch auch nichtblockierend). Und dann kannst du recvfrom in der Messgebearbeitung aufrufen.

Eine Annahme von dir ist allerdings falsch. Du bekommst nämlich die Message nicht zurück, zumindest nicht an dein Socket. In meinem Beispiel wird an den Port 6000 gesendet. Und dein Socket liegt irgendwo zwischen 1024 und 5000. Das sucht sich Windows aus beim ersten Sendto. Wenn du den Port deines eigenen Sockets selber festlegen willst, dann benötigst du die Funktion "bind". Dann kannst du den Port zum Senden nehmen und wirst auch gleich die Antwort mitbekommen.

Ich hatte für den Tutorialwettbewerb auf Delphi-Treff ein kleines Programm geschrieben, wo über Buttons jeder einzelne Socket-Befehl ausgeführt wird. (Liegt im Anhang)
Angehängte Dateien
Dateityp: zip simplesocket_163.zip (272,5 KB, 51x aufgerufen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat