Ich schreibe ein einfaches Sender- und Empfängerprogramm für die Übertragung mit UDP, so dass es verbindungslos ist, aber ich habe ein Problem herauszufinden, ob mein Empfängerprogramm bind() oder den Server und/oder beide aufrufen muss. Mein Empfängerprogramm (Client) wird in einer Endlosschleife sitzen und darauf warten, Daten vom Absender (Server) zu empfangen, und dann werden die Daten ausgedruckt. Ich bin mir nicht ganz sicher, was bind() genau neben dem Zuordnen einer Adresse/eines Ports zu einem bestimmten Socket tut. Warum muss ich bind() aufrufen?Wann sollte bind() beim Programmieren mit Sockets verwendet werden?
Antwort
Sie müssen bind(2)
anrufen, damit das Betriebssystem weiß, an welche Anwendung Netzwerkpakete weitergeleitet werden sollen. Wenn Sie bind
mit einem bestimmten Port für ein bestimmtes Protokoll (z. B. TCP oder UDP) anrufen, fragen Sie es "immer, wenn Sie ein Netzwerkpaket an Port XXXXX sehen, bitte geben Sie es mir".
Nehmen wir zum Beispiel an, dass zwei Kopien Ihres Programms laufen und beide auf UDP-Pakete am selben Port warten wollen. Wenn beide auf demselben Port bind
aufrufen, wird einer erfolgreich sein und einer wird fehlschlagen, da das Betriebssystem entscheiden kann, wer an jeden Port gebunden ist. Dann wird jedes an diesem Port empfangene Paket an diejenige Instanz des Programms übergeben, die erfolgreich an diesen Port gebunden hat.
Wenn Sie einen Socket zu einer festen Adresse oder/und einem Port machen wollen, verwenden Sie bind.
Wir sehen uns bei der Entwicklung einer Netzwerkanwendung müssen Sie "Adresse und Port" zu binden angeben, denn wenn Sie es für Localhost festlegen möchten, ist Ihre Anwendung nicht in der Lage, mit dem gesamten Netzwerk zu kommunizieren seine Kommunikation. Wenn Sie es mit Ihrer Netzwerkadresse einstellen, kann es nicht als localhost kommunizieren. Es kommuniziert nur mit dem Netzwerk und Wenn Sie es auf 0 setzen, kann es sowohl für localhost als auch für Netzwerk verwendet werden.
- 1. Wann sollte FOUNDATION_EXPORT verwendet werden?
- 2. Wann sollte $ .extend ({...}) verwendet werden?
- 3. Wann sollte WS_EX_NOREDIRECTIONBITMAP verwendet werden?
- 4. Wann sollte wkWebView verwendet werden?
- 5. Wann sollte StringBuilder verwendet werden?
- 6. Wann sollte Flask.g verwendet werden?
- 7. Wann sollte range.value verwendet werden?
- 8. Wann sollte Ambient beim Suchen nach einer Typdefinition verwendet werden?
- 9. Wann sollte ein neuer Ausnahmetyp verwendet werden?
- 10. Wann sollte in Rust inline verwendet werden?
- 11. Wann sollte ein Event Bus verwendet werden?
- 12. Wann sollte dies-> verwendet werden?
- 13. Wann sollte ein IOC-Container verwendet werden?
- 14. Wann sollte dynamic_cast der Referenz verwendet werden?
- 15. Wann sollte ein Singleton verwendet werden?
- 16. Wann sollte std :: atomic_compare_exchange_strong verwendet werden?
- 17. Wann sollte target = "_ self" verwendet werden?
- 18. Wann sollte assert() in Matlab verwendet werden?
- 19. Wann sollte StringProperty über String verwendet werden?
- 20. Wann sollte die didMoveToWindow-Methode verwendet werden?
- 21. Wann sollte der Cloud-Server verwendet werden?
- 22. Wann sollte self für Klasseneigenschaften verwendet werden?
- 23. Wann sollte Theme.AppCompat vs ThemeOverlay.AppCompat verwendet werden?
- 24. C++/Xcode Sockets bind() Fehler
- 25. Wann sollte das Schlüsselwort "as" und wann() Casting verwendet werden?
- 26. Wann sollte der Threadpool mit der festgelegten Größe verwendet werden?
- 27. Wann sollte ImageButton anstelle von ImageView verwendet werden?
- 28. Wann sollte die Spark DataFrame/Dataset API verwendet werden und wann sollte man RDD verwenden?
- 29. Wann sollte ein ViewModel statt eines Modells verwendet werden?
- 30. Wann sollte ein leeres Git-Repository verwendet werden?
Also mein Empfangsprogramm muss Bind() aufrufen und mein Absender muss nicht? – tree