Laden...

Zwei Programme per UDP auf einem Rechner verbinden

Erstellt von Maik25A vor 6 Jahren Letzter Beitrag vor 6 Jahren 4.277 Views
M
Maik25A Themenstarter:in
4 Beiträge seit 2014
vor 6 Jahren
Zwei Programme per UDP auf einem Rechner verbinden

Hallo C# Gemeinde,
vielleicht kann mir jemand bei der Lösung des folgenden Problems behilflich sein.
Ich möchte zwei Programme per UDP kommunizieren lassen. Beide
Programme laufen auf dem gleichen Rechner. Auf das eine Programm habe
ich keinen Einfluss, außer dass ich die IP, die Sende- und Empfangsportnummer
angeben kann. Das andere Programm ist mit C# mit dem .net Framework
von mir geschrieben. Laufen beide Programme auf unterschiedlichen Rechnern
funktioniert der Datenaustausch. Starte ich beide Programme auf dem gleichen
Rechner, bekomme ich einen Fehler, weil ich ein Port nur einmal öffnen kann.
Dies, weil ich bei UDPClient (portnr) nur eine Portnummer angeben kann.
Wie kann ich also bei meinem C#-Programm eine Portnummer A zum Empfang
benutzen und an die andere Portnummer B senden?

Vielen Dank!

16.807 Beiträge seit 2008
vor 6 Jahren

Ein Port kann immer nur ein mal verwendet werden.

Gib halt für die externe Anwendung einen anderen Port an als für Deine.

M
Maik25A Themenstarter:in
4 Beiträge seit 2014
vor 6 Jahren

Wenn ich das externe Programm z.B. auf Empfangsport 7710
und Sendeport 7711 setze, so benötige ich für meinen UDPClient
umgekehrt den Empfang auf 7711 und muss an 7710 senden.
Wie stelle ich das ein, wenn ich nach nach meinem Kenntnisstand
nur eine Portnummer angeben kann?

16.807 Beiträge seit 2008
vor 6 Jahren

Wir kennen das Programm nicht; was sollen wir jetzt sagen?

Wenn Dein Programm durch eine fehlende Konfiguration die Anforderung nicht erfüllen kann, dann können wir das an der Stelle nicht ändern.
Dann geht das an Deinem Rechner lokal vermutlich nur, wenn Du an Deinem Rechner zwei Netzwerkkarten mit zwei IPs hast, wo Du dann wiederum den Port doppelt (durch verschiedene IPs) nutzen kannst.

M
Maik25A Themenstarter:in
4 Beiträge seit 2014
vor 6 Jahren

Die Frage bezieht sich nicht auf mein Programm, sondern auf den
UDPClient aus dem Framework. Die Frage lautet, ob ich Sende- und
Empfangsport irgendwie getrennt einstellen kann, falls ja, dann wie.
Eine Aussage, dass dies nicht möglich ist, wäre zwar schade, würde
mir aber weitere Recherchearbeit ersparen!

16.807 Beiträge seit 2008
vor 6 Jahren

Wie gesagt, das ist kein UDP Problem, sondern schon der Tatsache geschuldet, dass Du auf einem System einen Port pro IP auch nur ein mal nutzen kannst.
Hat absolut nichts mit UDP an für sich oder dem Framework zutun.

Du kannst nicht in Programm A auf 7711 "hören" und gleichzeit mit Programm B auf Port 7711 "sprechen".
Dazu sind zwei verschiedene IPs notwendig; das ist aber bei TCP bzw. allen Kommunikationsverbindungen genau das selbe.

UDP ist aber überhaupt nicht für eine Two-Way Kommunikation auf dem selben Host konzipiert; TCP schon.

M
Maik25A Themenstarter:in
4 Beiträge seit 2014
vor 6 Jahren

Das "Du kannst nicht in Programm A auf 7711 "hören" und gleichzeit mit Programm B auf Port 7711 sprechen" habe ich ja schon dargelegt. Ich will auf getrennten Ports senden und empfangen.
Die Frage lautet konkret: Kann ich bei der UDPClient-Klasse den Sendeport (RemoteEndPoint)
separat einstellen oder nicht?

16.807 Beiträge seit 2008
vor 6 Jahren

Warum schaust Du nicht einfach in die Dokumentation? Dafür ist sie doch da.
Der UdpClient hat sowohl für die Receive Methode wie auch die Send Methode eine Überladung für einen entsprechenden EndPoint.
Ein Endpoint ergibt sich immer aus IP und Port. Keiner zwingt Dich bei Receive und Send den gleichen Endpoint zu übergeben.

Ob es das ist, was Du willst, weißt vermutlich nur Du. =)
Ich klinke mich hier mal aus...

T
2.219 Beiträge seit 2008
vor 6 Jahren

Was du brauchst ist quasi einen Server und einen Client UDP Socket in deinem Programm.
Der Client muss dann mit UDPClient die Daten auf dem Sendeport verschicken und dein Server muss dann auf dem Empfangsport die Daten von deinem externen Programm annehmen.

Spricht also nichts dagegen, dies umzusetzen.
Was du aber aktuell hast, scheint einfach nur ein UDPClient zu sein, der einfach nur auf einem Port Datensenden kann.
Entsprechend fehlt dir für den Empfang deines externen Tools noch der UDP Server Part.
Und natürlich musst du den Empfangsport dann in deiner Config hinterlegen.

Wie Abt schreibt, kannst du dir Beispiele dafür aus der Doku suchen.
Dort sollten auch ähnliche Snippets zum Empfangen per UDP umgesetzt sein.
Der Rest ist dann eigentlich nur noch Programmieren und Testen.
Alles Aufgaben, die du erledigen musst.

Nachtrag:
@Abt
Was er vor hat, ist den Client(Sender) + Server(Empfänger) in einem Tool umzusetzen, so wie es in seinem externen Tool wohl gemacht wurde.
Warum dies so umgesetzt wurde, kann ich nicht sagen.
Halte ich auch nicht für sinnvoll.

Ob es dann sinnvoll ist, dies gleiche zutun, ist mal dahin gestellt.
Das sollte aber das Problem sein, was hier gelöst werden soll.
Entsprechend muss eben das eigene Programm zum Senden einen UDP Client verwenden und zum Empfangen eines UDP Server anbieten.

Somit kann Programm A auch auf Port 7710 lauschen und B auf Port 7711.
Beide können sich dann auch ohne Probleme auf dem jeweiligen Port, also Programm A dann auf Port 711 und Programm B dann auf Port 7710 Daten zusenden.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 6 Jahren

Na das ist bei UDP schon ein bisschen anders, weil das Protokoll anders funktioniert.
Senden und Empfangen geht prinzipiell schon; sieht man ja auch an der Doku von UdpClient.

Aber UDP ist nicht für eine Two-Way-Communication auf dem selben Host konzipiert.

T
2.219 Beiträge seit 2008
vor 6 Jahren

@Abt
Wusste ich bisher nicht.
Da das externe Tool dies aber scheinbar benötigt, wäre eine Umstellung auf TCP wahrscheinlich auch nicht machbar, es sei den das Tool kann dies.

Dies kann ich aber nicht sagen, muss der OP sagen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 6 Jahren

UDP benutzt man bewusst; er wird sich da schon was gedacht haben, wieso er nicht TCP nutzt 😉

T
2.219 Beiträge seit 2008
vor 6 Jahren

Stimmt, steht auch im Startpost.
Also kann er nur die Umsetzung des UDP Server in seinem Tool noch machen.
Dann hat er alles was er braucht und dürfte somit auch bei sauberer Umsetzung auch mit seinem externen Tool arbeiten können.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.