Vor einiger Zeit habe ich mal einen Chat geschrieben, in dem unter Windows und Mac alles wunderbar funktionierte. Doch momentan arbeite ich an einem Spiel und es gibt bei einem einfachen "recvfrom()"-Befehl immer einen Error unter Windows. Hier ein Ausschnitt des Scripts:
Also meines Erachtens nach wird der PORT doch frei gewählt von Python, solange man den Socket nicht binded, oder? Beim Senden benutze ich den PORT 9999.
@Hustensaft: Du sendest an Port 9999 und hoffst das der Empfänger dann zufällig genau auf dem Port was empfängt? Also wenn das so funktionieren würde. Wenn jetzt zwei oder mehr Empfänger einfach lauschen ohne zu sagen auf welchem Port und es kommen Pakete rein, wer empfängt die denn Deiner Vorstellung nach? Und wie sinnvoll und (un)sicher wäre das dann?
Also ist es zum recieven von Paketen zwingend notwendig den Socket zu binden?
Eigentlich geht es um die Kommunikation zwischen einem Server und Klienten. Als erstes sendet der Client ein "Hallo" an den Server. Dieser ist gebildet an eine IP mit PORT. Er empfängt nun die Daten und speichert den User mit einem beliebigen Port, den der Rechner des Klienten nunmal gerade benutzt hat. Der Server antwortet dann auf genau diese Adresse. Müsste dann "recvfrom(1024)" nicht funktionieren? Also besitzt der Client dann nicht einen festen Port?
@Hustensaft: Nein, denn der Client sendet ja etwas im Gegensatz zu dem Code im ersten Beitrag und durch das senden *vor* dem Empfangen muss ja ein Port ausgesucht werden. Allerdings möchte man eventuell auch beim Client vorher explizit ein `bind()` machen um das Netzwerkinterface bestimmen zu können über den das UDP-Paket rausgeht. Wenn man dabei als Port 0 angibt wird ein freier Port vom System ausgewählt.