UDP - Nachricht angekommen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

judos

Betreff: UDP - Nachricht angekommen?

BeitragDi, März 18, 2008 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen.

Ich möchte über UDP ein Netzwerk Spiel machen.
Nun möchte ich es so machen, dass der Client einfach Spiele suchen kann, ohne dass dieser eine IP des Hosts einzugeben braucht.
Dachte mir ich könnte einfach mit dem Host alle 20 Sekunden Nachrichten an alle IP Adressen (192.168.1.x) senden.
also eigentlich 256 Pakete (1-256 liege ich da schonmal richtig? oder ist das 0-255? )

Jetzt tritt bei mir das Problem auf, das beim zweiten mal ungefähr 2sekunden dazu nötig sind. Beim ersten mal funktionierte es aber in 8 millisekunden.

Kann man also prüfen ob eine Nachricht bei einem Computer angekommen ist, ohne dortiges BB Programm? Um zu verhindern dass man an alle Computer immer wieder Nachrichten senden muss?

Oder seht ihr eine andere Möglichkeit dieses Problem zu lösen?
(Bitte nicht sagen -> Client soll IP eingeben, andere Spiele kommen nähmlich auch ohne das aus...)

mfg judos

Eingeproggt

BeitragDi, März 18, 2008 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Man könnte die PCs mit der WinAPI pingen. Ob das allerdings in 2 sek geht wage ich zu bezweiflen. Geschweige denn in 8ms...

(Es ist übrigens 0-255)

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

BIG BUG

BeitragDi, März 18, 2008 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau genommen brauchst Du gar nicht alle IPs durchgehen, sondern kannst sog. Broadcasts benutzen, die automatisch alle Computer im Subnetz adressieren.
Hierzu muss die IP mit 255 enden. Also in Deinem Fall einfach 192.168.1.255.
So wie Du bis 255 gehst, werden also alle Clienten 2x angesprochen...

Könnte mir vorstellen, dass es auch irgend ein Windows-Tool gibt, das die vorhandenen Computer im Netzwerk anpingen und deren IPs zurückliefern kann.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

judos

BeitragDi, März 18, 2008 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm naja es müsste ja nicht in 8ms gehen, aber man sollte zumindest in max.5 Sekunden überprüfen können welche PCs/ IPs mit UDP anzusteuern sind.

Die 5Sekunden könnten ja dann beim Laden des Spiels oder so anfallen.
Und man muss es nur einmal machen im Spiel...

Wie ginge das denn mit WinAPI ??

mfg judos

/edit:
Ich muss die Nachricht nur an 192.168.1.255 senden, dann bekommen alle Rechner von 192.168.1 diese Nachricht? Very Happy das erscheint mir schon fast zu einfach Shocked Werds mal damit probieren!! Vielen dank für die Hilfe!!

Eingeproggt

BeitragDi, März 18, 2008 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry... Ich meinte nicht WinAPI sondern die cmd-Befehle. Das könnt allerdings noch langsamer werden, weil ich da nur die Möglichkeit kenne, die Ausgabe in eine Datei umzuleiten und diese Datei nachher zu öffnen und zu analysieren. Mach einfach Start-Ausführen-"cmd" und gib in der Konsole "ping" ein. Da gibts eine Erklärung Smile

Und das mit dem Broadcast wusste ich auch nicht Embarassed

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

judos

BeitragDi, März 18, 2008 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
ach kein problem...
dachte gleich an die cmd befehle, da ich mich mit WindowsApi sowieso noch nicht so vertraut fühle ~~

werd mal beides anschauen und falls es probleme gibt mich wieder hie melden Very Happy

Vielen Dank nochmals Eingeproggt und BIG BUG!

mfg judos
 

judos

BeitragDi, März 18, 2008 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
@BIG BUG: Hmm bist du dir sicher dass ich einfach nur die IP am schluss 255 nehmen muss?
Die Nachrichten kommen nämlich bei anderen Computer einfach nicht an.
Wenn ich aber gezielt eine Nachricht an einen Computer sende, kommt die Nachricht an.

Muss nochmals Code durchgehen, vielleicht liegts auch an mir, aber die wahrscheinlichkeit dafür ist sehr klein Rolling Eyes

mfg judos

BtbN

BeitragDi, März 18, 2008 10:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Zuerst mal muss es auf keinen Fall 196.168.1.x sein. Bei mir ist es z.B. .0.x, oder war auch schonmal .178.x.
Um die Broadcast-Addresse in einem IPv4 Netz zu erhalten must du deine eigene IP nehmen, und mittels einem binären AND mit der Subnetzmaske verrechnen.
An diese Addresse sendest du dann EIN Paket auf einem speziellen Port jenseits des Nutz-Bereiches, welches fragt, ob hier noch andere Spieler sind.
Ein spieler empfängt das Paket, und antwortet dir.

Edit: Wikipedia Falsch gelesen. Du must bei deiner IP alle Host-Bits auf 1 setzen. Bei 196.168.0.x wären das die letzen 8 bits, sprich es würde in der Tat 192.168.0.255 daraus werden.
 

judos

BeitragDi, März 18, 2008 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe ach ok gut!!

habe gemerkt, dass es doch an mir lag und mit 192.168.1.255 funktioniert.
noch eine letzte Frage: geht das auch wenn man den grösseren Bereich abtasten will? Also alle Rechner mit der IP 192.168.X.Y ?? So dass man nur ein einziges Paket senden muss?
oder soll ich das einfach so machen, dass das Programm an jede 192.168.x.255 ein paket sendet?

mfg judos

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group