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

FalkT

Treue Seele

Beiträge: 125

Wohnort: AC

  • Private Nachricht senden

11

15.01.2010, 17:09

Zitat von »"fred2507"«

Zitat von »"Nox"«

*.*.*.255 (die sterne sind das aktuelle netzwerk)


und wie kriege ich das aktuelle netzwerk raus? wenn ichs mit den sternen eingebe, klappts nicht.


Das gilt natürlich nur für die entsprechende Netzmaske.

Deswegen wird die Liste der Empfänger normalerweise automatisch bestimmt. Such im Internet mal nach SO_BROADCAST.

12

15.01.2010, 17:15

Zitat von »"FalkT"«

Zitat von »"fred2507"«

Zitat von »"Nox"«

*.*.*.255 (die sterne sind das aktuelle netzwerk)


und wie kriege ich das aktuelle netzwerk raus? wenn ichs mit den sternen eingebe, klappts nicht.


Das gilt natürlich nur für die entsprechende Netzmaske.

Deswegen wird die Liste der Empfänger normalerweise automatisch bestimmt. Such im Internet mal nach SO_BROADCAST.


ok, habs nun amders gelöst. die sfml kann mir in nem string meine eigene netzwerk-ip geben. ich ändere einfach die letzten drei chars in 255. so findet der client den server, ohne dass ich irgend ne ip eingebe. jetzt steht nem goosegogs multiplayer nichts mehr im wege ausser zeitmangel :lol:

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

13

15.01.2010, 17:26

Und was ist wenn das garnicht die Broadcast Adresse ist?

14

15.01.2010, 17:28

Zitat von »"David_pb"«

Und was ist wenn das garnicht die Broadcast Adresse ist?


es gibt in sfml 2 funktionen für das holen von ip's. einmal für die adresse lan, und die andere für die internet ip.

C-/C++-Quelltext

1
2
3
4
5
// Your address in the local area network (like 192.168.1.100 -- the one you get with ipconfig)

sf::IPAddress Address = sf::IPAddress::GetLocalAddress();

// Your address in the world wide web (like 83.2.124.68 -- the one you get with www.whatismyip.org)

sf::IPAddress Address2 = sf::IPAddress::GetPublicAddress();

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

15.01.2010, 17:35

Und? Wenn du die letzten 3 Bytes veränderst kannst du trotzdem nicht sicher gehen, dass das die Broadcast Adresse ist.

16

15.01.2010, 17:36

Zitat von »"David_pb"«

Und? Wenn du die letzten 3 Bytes veränderst kannst du trotzdem nicht sicher gehen, dass das die Broadcast Adresse ist.


warum nicht? im lan sitzt mein mitspieler doch im selben netzwerk wie ich. sorry falls ich das nicht raffe, hab vorher noch nie was damit zutun gehabt

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

17

15.01.2010, 17:45

INADDR_BROADCAST sollte auch gehen. Die dürfte auch immer gelten.
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.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

18

15.01.2010, 18:16

Zitat von »"fred2507"«

Zitat von »"David_pb"«

Und? Wenn du die letzten 3 Bytes veränderst kannst du trotzdem nicht sicher gehen, dass das die Broadcast Adresse ist.


warum nicht? im lan sitzt mein mitspieler doch im selben netzwerk wie ich. sorry falls ich das nicht raffe, hab vorher noch nie was damit zutun gehabt


Wenn es nur in deinem LAN funktionieren soll, dann ist die Lösung ok.

Zitat von »"Nox"«

INADDR_BROADCAST sollte auch gehen. Die dürfte auch immer gelten.


Das sendet aber auf alle Interfaces. Wenn man selektiv senden will muss man sich die Broadcast Adresse anders besorgen.

19

15.01.2010, 22:08

Kurzer Exkurs ins IP:

Die Broadcast Adresse ist abhängig von der (Sub-)netzmaske.

In einem Beispiel:

IP-Adresse: 192.168.1.1 (Binär: 11000000.10101000.00000001.00000001)
Subnetz-Maske: 255.255.255.0 (Binär: 11111111.11111111.11111111.00000000)
- So dürften wohl viele Private Lans konfiguriert sein.

Die nullen der Subnetzmaske, also in diesem Fall dass letzte Oktett definiert die sog. "host-id", und der Teil mit den vielen einsen, in diesem Fall die ersten drei Oktetts die sog. "netz-id".

Um nun erstmal die Netzadresse rauszufinden müsste man IP-Adresse und Subnetz-Maske Binär AND verknüpfen:

Quellcode

1
2
3
4
  11000000.10101000.00000001.00000001
& 11111111.11111111.11111111.00000000

  11000000.10101000.00000001.00000000 (192.168.1.0)


Wir haben nun die Netzadresse - wollen aber Broadcast. Dazu müssen wir nur alle Bits der "host-id" auf 1 setzen, in diesem fall kämen wir dann auf:

11000000.10101000.00000001.11111111 (192.168.1.255)

Man dürfte aber erkennen, dass folgende Subnetz-Maske:
255.255.255.128
Das verändert hätte, denn Binär sähe das so aus:
11111111.11111111.11111111.10000000

Damit wären für die "host-id" nur die letzten 7 Bit zuständig und unser Broadcast wäre bei 192.168.1.127.

Wie du siehst ist es nicht damit getan das letzte Oktett auf 255 zu setzen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

20

15.01.2010, 22:21

So ist es. Wenn du Ip(v4) + Netzmaske bekannt ist kann also folgendes getan werden:

C-/C++-Quelltext

1
2
3
uint32 ip = xxxxxxxx;
uint32 mask = yyyyyyyy;
uint32 bcadd = ( ip & mask ) | ~mask;

Werbeanzeige