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

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

21

21.05.2012, 15:11

Wenn du nie bind aufrufst, wie gibt du dann den Port an auf dem der eine Client Senden und (noch viel wichtiger) der andere Client empfangen soll? ADDR_ANY ist übrigens äquivalent zu 0.0.0.0 .
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

22

21.05.2012, 15:31

Den Port kann man in der Struktur SOCKADDR_IN angeben. Aber gut, dann werde ich ab sofort einfach den selben "bind" Aufruf für den Client machen, wie ich ihn bisher nur für den Server gemacht habe.
Dann danke euch erst mal, heute Abend werde ich das gleich mal ausprobieren :-)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

23

21.05.2012, 15:37

Bei UDP gibt es nicht das klassische "Server/Client" Bild und die Adresse gibt nur das Ziel an, nicht aber von welchem Interface und Port es geschickt werden soll. Natürlich ist ein bind nur für die notwendig die Anfragen empfangen sollen. Sprich wenn du das Konzept "Client fragt+Server antwortet" implementieren willst, reicht das bind bei den Servern.

EDIT: ggf ist die Nutzung der Bezeichnungen "Server" und "Client" ein wenig irreführend. Es gilt halt die Regel: Wer broadcasts empfangen will, muss auf einem definierten Port zuhören=> bind notwendig.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

24

21.05.2012, 22:27

Also ich habe jetzt wieder etwas an meinem Netzwerk Programm weiter gearbeitet und ein paar Sachen hinbekommen aber auch ein paar neue Probleme:
1.) Das Broadcasting funktioniert im Moment nur wenn ich als IP "192.168.2.255" angebe (die IP meines Desktops ist 192.168.2.128). "255.255.255.255" oder "192.168.255.255" funktioniert jedoch nicht.
Hab das Programm ca. ne Minute warten lassen aber bei den ganzen PC Spielen (wie z.B. Counter-Strike etc.) dauert das 'scannen' nach offnen Spielen nie länger als 10 Sekunden.
2.) Wenn ich mein Socket einmal mit "bind" an "0.0.0.0" (bzw. INADDR_ANY) und irgend einen Port und gebunden habe, kann ich das den gesammten Programmablauf nie wieder tun.
Auch nicht wenn ich das Socket bereits mit "close" bzw. "closesocket" (unter Windows) geschlossen und neu erstellt habe. Allerdings habe ich das bis jetzt noch nicht mit variirenden Ports ausprobiert.
Aber eigentlich sollte das doch nach dem Schließen und Neuerstellen des Sockets kein Problem sein, den selben Port wieder zu verwenden, oder?!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

25

22.05.2012, 00:04

Jaein. Es gibt dafür extra einen REUSE bzw share flag. Ehrlich gesagt hatte ich das Problem aber noch nicht und es spricht glaube ich dafür, dass das OS den Socket noch nicht freigeben kann, weil da noch eine Aktion im Gange bzw. Daten im Puffer sind. Der Broadcast wird ggf. von einem Router aufgehalten, wenn du einen laufen hast. Vorallem wird ein broadcast oft nicht von WLan auf Lan bzw visaverse umgeroutet.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

26

22.05.2012, 00:18

Muss ich dafür dieses Flag mit "setsockopt" setten oder kann mein Programm nur verwendet werden wenn eine LAN- aber keine WLAN Verbindung besteht?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

27

22.05.2012, 00:56

Mal rein prinzipiell: Wieso willst du das Socket überhaupt schließen wenn du es gleich drauf wieder verwenden willst?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

28

22.05.2012, 08:46

Falls der User die Verbindung disconnecten und eine neue unter anderem oder gleichen Port auf machen will.
Aber ich weiß immer noch nicht, wie ich einen 'vollen' Broadcast mit "255.255.255.255" machen kann.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

22.05.2012, 09:05

Wie Nox schon sagte: Eventuell gar nicht, wenn Dein Router da keine Lust drauf hat. Den Port zu reusen dürfte aber kein Problem darstellen, auch wenn der Anwendungsfall fraglich ist, weil das selbe Socket ja auch einfach immer offen bleiben könnte, was aber auch nicht so meine bevorzugte Wahl wäre.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

30

22.05.2012, 13:04

Kann es sein, dass ich zum 'vollen' Broadcasten mit "setsockopt" das Flag 'SO_BROADCAST' auf true setzten muss?

Werbeanzeige