Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

10.11.2012, 15:29

Mal wieder ein Problem mit Netzwerk-Programmierung

Hi, ich habe mal wieder ein kleines Problem mit der Netzwerk Progammierung. Folgend Situation:

Um alle offenen Game-Server im LAN zu finden, hat jeder Server einen Thread laufen, in dem ein separates kleines UDP/IP Netzwerk läuft, dass auf anfragen von neuen Clients per Broadcast antwortet.
D.h. bevor ein neuer Client einem Game-Server beitreten will, muss er erst "Server Suchen" und sendet dabei eine Broadcast Nachricht und hofft, dass alle offenen Game-Server antwortetn.
Von Server Seite läuft dafür wie gesagt, ein extra thread, der die ganze Zeit darauf wartet, dass eine solche Anfrage kommt.
Das läuft dann auch alles auf einem eigenen Port.

So weit so gut, das Problem das ich habe ist, dass wenn ich das auf nur einem Rechner testen will - also die Anfrage an 127.0.0.1 schicke - antwortet der Server eben auch an 127.0.0.1 und schluckt die Antwort aber leider selbst.
D.h. er erhält dann seine eigene Antwort und das Client Programm bekommt nichts mit.
Das Client programm erhält übrigens auch die eigene Anfrage als Antwort (weil eben an 127.0.0.1 gesendet und von 127.0.0.1 empfangen wird), allerdings erhält hierbei der Server die Anfrage.

Nur der Client bekommt nie eine Antwort vom Server :(

Wie kann ich dieses Problem lösen? An einem PC zu debuggen geht einfach besser, als jedes mal das Program auf mein Laptop zu kopieren und da gleichzeitig auf zwei Rechnern zu debuggen.

Danke schon mal,
Lukas

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

11.11.2012, 15:00

Berücksichtigst du den Port nicht?

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

3

11.11.2012, 15:27

Darauf würde ich auch tippen. Wobei du es eigentlich afaik eigentlich gar nicht so einfach können solltest, zweimal am selben Port zu lauschen, auch bei UDP nicht. Dein Server sollte solche Suchmeldungen auf Port X empfangen und dem Client auf Port Y antworten. Dann schluckt der auch nicht seine eigenen Nachrichten.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

11.11.2012, 16:54

Also Server Empfängt Nachrichten auf Port X, Client sende Nachrichten an Port X, Server Antwortet an Port Y und Client Empfängt an Port Y?

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

5

11.11.2012, 21:56

Ich hatte das selbe Problem auch mal.
Da lag es daran, dass UDP ja kein Verbindungsorientiertes Protokoll ist, sondern ein Paketorientiertes, und die Ports daher nicht empfangsbereit sind. Wenn du die Server einfach einmal zum Start von dem Port aus, auf dem sie danach lauschen, ein UDP Paket irgendwo in die Pampa schicken lässt, funktioniert das ganze.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

6

12.11.2012, 10:19

Also Server Empfängt Nachrichten auf Port X, Client sende Nachrichten an Port X, Server Antwortet an Port Y und Client Empfängt an Port Y?
Ja, so soll das funktionieren!
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Werbeanzeige