zuerst - es ist nicht eine Frage von "wie an den Anschluss einer anderen Software binden".mehrere UDP-Sockets, an denselben Port gebunden?
jetzt, ich habe eine Client-Server-Anwendung, basierend auf TCP, und ich möchte es UDP machen, aber ich bin etwas fehlt ..
ich habe 2 Regeln dies (was ich put) app:
1) der "Server" kann hinter Router ohne Portweiterleitung Konfiguration bleiben.
2) Der "Client" kann nur einen Port hören.
in TCP i tut es wie folgt:
1) der Server Anfangsverbindung an den Client auf dem Port X.
2) öffnet, wenn der Client es Kommunikationskanal mit dem Server öffnen will, verwendet die Ausgangsbuchse zu fragen der Server für einen neuen.
3) Der Server erstellt einen neuen Socket und verbindet sich mit dem Client an Port X. 4) Der Client akzeptiert diese neue Verbindung an Port X, und nun spricht der Client mit dem Server über diesen neuen Socket.
so kann ich mehrere Verbindungen auf dem gleichen Port haben.
in UDP, ich habe ein kleines Problem ..
1) der Server
2), wenn der Kunde will Kommunikationskanal an den Server öffnen Anforderung sendet die Anfangsverbindung dgram an den Client auf dem Port sendet X. für einen neuen Socket an die Adresse des ursprünglichen Sockets.
3) der Server empfängt die Nachricht, erstellt einen neuen Udp-Socket und verwendet es, um Daten an den Client an Port X zu senden.
4) Der Client erhält das neue dgram, und ....?
Grundsätzlich möchte ich jetzt diese Verbindung "akzeptieren". Das bedeutet: Einen neuen UDP-Socket zu erstellen, ihn auch an Port X zu binden und nur Daten von diesem spezifischen eingehenden Socket addr (ip, port) zu empfangen. aber ich kann das nicht tun, weil ich nicht mehrere Sockets an denselben Port binden kann.
Was ist also der Weg, um mehrere UDP-Verbindungen an einem Port zu erstellen? (In Art und Weise der Vernetzung nicht schaffen nur einen Ringpuffer von dgrams und an die rechten Buchse senden)
Dank :)
Sie können keine Verbindung mit UDP haben, da UDP kein "verbundenes" Protokoll, sondern ein Datagrammprotokoll ist. – sfk
und ich war sehr vorsichtig, nicht das "Verbindung" Wort in der UDP-Angelegenheit zu sagen. wenn ich "Verbindung" sage, bedeute ich, ein Tor für die Beantwortung zu öffnen. also was ich will, ist nur die serverseite (die von außen blockiert wird), um ein UDP-dgram an den client zu senden, damit der client später dgram an diesen sockel senden kann und dgramme von nur diesem spezifischen socket (wie tcp accept) empfängt) es war möglich, wenn ich einen neuen Socket auf dem gleichen Port binden könnte, und Daten nur von dem (IP, Port), die ich will. – RoeeK
@sfk Obwohl UDP staatenloses Protokoll ist, beeinflusst der Aufruf von connect() in großem Umfang die Socket-Operationen. Unter FreeBSD können Sie beispielsweise keine Fehler (z. B. ICMP-Ziel nicht erreichbar) vom UDP-Socket erhalten, es sei denn, es ist verbunden. – WGH