2012-04-09 11 views
0

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

1

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.

+0

Also mein Empfangsprogramm muss Bind() aufrufen und mein Absender muss nicht? – tree

0

Wenn Sie einen Socket zu einer festen Adresse oder/und einem Port machen wollen, verwenden Sie bind.

0

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.

Verwandte Themen