LAN Spiele anzeigen
Übersicht

![]() |
ToeBBetreff: LAN Spiele anzeigen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollte für mein Spiel (LAN/UDP) eine Anzeige machen, welche Spiele gehosted wurden. Aber wie mach ich das ?
Kann ich das iwie intern lösen, also das ich einfach jede IP abfrage, ob Host oder nicht ? Oder muss ich das mit einem externen Speicherort sein ? Aber wie bestimme ich so einen Externen Süeicherort bzw. wie kann ich daten draufschreiebn / Abrufen/ löschen ?? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Im LAN kannst du doch über die IP-Adresse 255.255.255.255 zb. ein Byte schicken. Das müsste dann jeder PC empfangen, da das ein Broadcast an alle IPs ist. Dann schickt jeder Host an die Absenderadresse, dass er ein Spiel offen hat.
PS: Ich bastel mir gerade ein PHP-Skript für den Internetgebrauch, welches ich in meinem Spiel einsetzen werde. Wenn jemand schon so etwas hat, wäre es nett, wenn er mich anschreibt.... |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also du meinst das so :
Zitat: Client :
Send Byte "10" to "255.255.255.255" WaitFor answer Get All Host Ips Server : If RecvByte = "10" SendByte to IP "10" Meinst du das so in etwa ? Danke auf jeden fall ! mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jop, so inetwa müsste das gehen - meines wissens. die server schreiben dann sowas wie "server auf ip xxx mit 32 spielern unter den namen server1 auf der testmap ohen passwort" | ||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht iwie nicht :
Client : Code: [AUSKLAPPEN] Port_recv = 8000:Port_send = 8001
stream_send = CreateUDPStream(Port_send) stream_recv = CreateUDPStream(Port_recv) IP(1) = INT_IP("255.255.255.255") WriteByte(stream_send,10) SendUDPMsg(stream_send,IP(1),Port_send) wait_ms=MilliSecs()+2500 Servers = 0 Repeat If RecvUDPMsg(stream_recv) Then byte = ReadByte(stream_recv) Select byte Case 10 Serv(Servers) = UDPMsgIP(stream_recv) Serv_Nam(Servers) = ReadString(stream_recv) Servers = Servers + 1 End Select EndIf If wait_ms <= MilliSecs() Then Exit Forever Servers = Servers - 1 Print "Servers Gefunden : "+Servers For i = 0 To Servers Print i+".: "+Serv_Nam(i)+"("+Serv(i)+")" Next Serv_Sel = Input("Host index : ") If Ser_Sel < 0 Then Serv_Sel = 0 If Serv_Sel > Servers Then Serv_Sel = Servers IP(1) = Serv(Serv_Sel) Delay 100 Server : Code: [AUSKLAPPEN] While RecvUDPMsg(stream_recv)
Select ReadByte(stream_recv) Case 10 IPIP = UDPMsgIP(stream_recv) WriteByte(stream_send,10) WriteString(stream_send,Name(1)) SendUDPMsg(stream_send,IPIP,Port_send) End Select Wend Der Client zeigt mir immer an : Servers gefunden : -1 Warum ? Was mach ich Falsch ? nfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, ich habe mal schnell etwas gebastelt, läuft so weit, hat nur ein paar kleine Schönheitsfehler beim Anzeigen....
Ich habe dir leider etwas falsches erzählt, sry! Nämlich ist gestaltet sich die Broadcast-IP so: Zitat: Das Ziel sind die Teilnehmer eines bestimmten Netzes. Die Adresse wird durch die Kombination aus Zielnetz und dem Setzen aller Hostbits auf 1 angegeben. Folglich lautet die Adresse für einen directed broadcast in das Netz 192.168.0.0 mit der Netzmaske 255.255.255.0 (192.168.0.0/24): 192.168.0.255.
Quelle: wikipedia Spieler, der alle Spiele abfragt: Code: [AUSKLAPPEN] stream = CreateUDPStream(80000)
Type Server Field IP Field Name$ End Type IP = Int_IP("192.168.0.255") Const Search = 1 Const NewServer = 2 AppTitle "1 zum Abfragen" While Not KeyHit(1) Cls i=0 If KeyHit(2) Then Text 0,i*20, "sende" i=i+1 WriteByte Stream, Search SendUDPMsg Stream, IP, 80001 End If Delete Each Server recv=RecvUDPMsg(stream) If(recv<>0) While(ReadAvail(Stream)>0) InIP = UDPMsgIP(stream) Select ReadByte(stream) Case NewServer Server.Server = New Server Server\IP = InIP Server\Name$ = ReadString$(stream) End Select Wend recv=RecvUDPMsg(stream) EndIf For Server.Server = Each Server Text 0,i*20, DottedIP$(Server\IP) i=i+1 Text 0,i*20, Server\Name$ i=i+1 Print "" Next Delay 750 Wend End Function INT_IP(ip$) p1=Instr(ip$,".") p2=Instr(ip$,".",p1+1) p3=Instr(ip$,".",p2+1) Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1)) End Function Und der antwortende Server Code: [AUSKLAPPEN] stream = CreateUDPStream(80001)
Const Search = 1 Const NewServer = 2 IP = Int_IP("192.168.0.255") AppTitle "1 zum manuellen Sendung ohne Anfrage" While Not KeyHit(1) i=0 Cls recv=RecvUDPMsg(stream) If(recv<>0) While(ReadAvail(Stream)>0) InIP = UDPMsgIP(stream) In = ReadByte(stream) Select In Case Search WriteByte Stream, NewServer WriteString Stream, "Test-Server" SendUDPMsg Stream, InIP, 80000 Text 0,i*20, "Anfrage von " + DottedIP$(InIP) i=i+1 End Select Wend recv=RecvUDPMsg(stream) EndIf If KeyHit(2) Then Text 0,i*20, "manuelle Sendung" i=i+1 WriteByte Stream, NewServer WriteString Stream, "Test-Server" SendUDPMsg Stream, IP, 80000 End If Delay 750 Wend End Function INT_IP(ip$) p1=Instr(ip$,".") p2=Instr(ip$,".",p1+1) p3=Instr(ip$,".",p2+1) Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1)) End Function [quote][/quote] Hoffentlich verstehst du meinen Code, habe leider keine Zeit für die Kommentare, da ich dringend ne Periodisierung für Geschichte machen muss..... ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heiß also im endeffekt, ich muss statt "255.255.255.255" "192.168.0.255" in meinen Code iengeben ?
Danke ! mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Theoretisch schon, aber er hat bei mir trotzdem nicht funktioniert, also deiner.. | ||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Problematisch wirds nur, wenn ein Netzwerk nicht 192.168.0.xxx ist, sondern irgend etwas anderes, oder gar ein Netz mit 2 Bytes fürn host.
Du must immer Subnetmask|deine IP nehmen, um die Broadcast-Addresse zu bekommen. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sry, aber ich komm net mit... Was muss ich jetzt machen ?
Danke auf jden Fall ! Mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du in einem Netzwerk bist mit der Subnetzmaske 255.255.255.0, ist die IP, an die du die Frage senden willst, damit die alle erhalten, 192.168.0.255.
Welche Maske du hast, siehst du bei den Eigenschaften deiner Netzwerkverbindung (bei mir ist es 255.255.255.0, ist glaube ich auch der Standard): |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Subnetmask 255.255.255.0 garantiert dir nicht, dass es 192.168.0.255 ist.
Es kann genau so gut 192.168.178.255 sein. Oder etwas belibig anderes. Wie gesagt, deine IP nehmen, und alle host-bits auf 1 setzen. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay danke erstmal, also ich muss dann mit HostIP meine IP herausfinden und dann was genau ändern ? Host-Bits ? Was is das ? Die endung (.0.1;.0.2 usw) ??
thx ! Mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Um die Broadcast-IP zu ermittlen, musst du deine IP binär mit der invertierten, binären Subnetzmaske durch Oder verknüpfen - so las ich das HIER eben ![]() Ich habe auch einen Online-Rechner dazu gefunden: Klick Bin gerade dabei das in eine Funktion zu quetschen, bis jetzt siehts schon mal gut aus, ich werde den Code dann hier reinstellen. ------------------------------------- So, ich habs! Ich bin hab es zwar alles etwas zu umständlich gemacht, was mir aber erst später einfiel. Hauptsache es funktioniert, oder? Hier, meine Lösung zum errechnen der Broadcast-IP: Code: [AUSKLAPPEN] n = CountHostIPs("")
MeineIP = HostIP(1) IP$ = DottedIP$(MeineIP) Print "Broadcast-IP:" + Errechnen$(IP$, "255.255.255.0") WaitKey End Function Errechnen$(IP$, Submask$) ;IP aufteilen IPClassA$ = Left$(IP$, Instr(IP$, ".")-1) IP$ = Mid$(IP$, Instr(IP$, ".")+1) IPClassB$ = Left$(IP$, Instr(IP$, ".")-1) IP$ = Mid$(IP$, Instr(IP$, ".")+1) IPClassC$ = Left$(IP$, Instr(IP$, ".")-1) IP$ = Mid$(IP$, Instr(IP$, ".")+1) IPClassD$ = IP$ ;Subnetzmaske aufteilen SubClassA$ = Left$(Submask$, Instr(Submask$, ".")-1) Submask$ = Mid$(Submask$, Instr(Submask$, ".")+1) SubClassB$ = Left$(Submask$, Instr(Submask$, ".")-1) Submask$ = Mid$(Submask$, Instr(Submask$, ".")+1) SubClassC$ = Left$(Submask$, Instr(Submask$, ".")-1) Submask$ = Mid$(Submask$, Instr(Submask$, ".")+1) SubClassD$ = Submask$ ;Dezimal zu Binär IP$ = ToBIT$(IPClassA$) + ToBIT$(IPClassB$) + ToBIT$(IPClassC$) + ToBIT$(IPClassD$) SubMask$ = ToBIT$(SubClassA$) + ToBIT$(SubClassB$) + ToBIT$(SubClassC$) + ToBIT$(SubClassD$) ;Invertieren For i = 1 To Len(SubMask$) If Mid$(Submask$, i, 1) = "1" Then SubMask2$ = SubMask2$ + "0" If Mid$(Submask$, i, 1) = "0" Then SubMask2$ = SubMask2$ + "1" Next ;OR-Verknüpfung For i = 1 To Len(IP$) If Mid$(Submask2$, i, 1) = 0 And Mid$(IP$, i, 1) = 0 Then Result$ = Result$ + "0" Else Result$ = Result$ + "1" End If Next ;Binär wieder in Dezimal ClassA$ = Mid$(Result$, 1, 9) ClassB$ = Mid$(Result$, 9, 8) ClassC$ = Mid$(Result$, 17, 8) ClassD$ = Mid$(Result$, 25, 8) ClassA$ = ToDec$(ClassA$) ClassB$ = ToDec$(ClassB$) ClassC$ = ToDec$(ClassC$) ClassD$ = ToDec$(ClassD$) Return ClassA$ + "." + ClassB$ + "." + ClassC$ + "." + ClassD$ End Function Function ToDec$(Zahl$) If Mid$(Zahl$, 1, 1) = "1" Then Dec = Dec + 128 If Mid$(Zahl$, 2, 1) = "1" Then Dec = Dec + 64 If Mid$(Zahl$, 3, 1) = "1" Then Dec = Dec + 32 If Mid$(Zahl$, 4, 1) = "1" Then Dec = Dec + 16 If Mid$(Zahl$, 5, 1) = "1" Then Dec = Dec + 8 If Mid$(Zahl$, 6, 1) = "1" Then Dec = Dec + 4 If Mid$(Zahl$, 7, 1) = "1" Then Dec = Dec + 2 If Mid$(Zahl$, 8, 1) = "1" Then Dec = Dec + 1 Return Str$(Dec) End Function Function ToBIT$(Zahl) If Zahl >= 128 Then Zahl = Zahl - 128 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 64 Then Zahl = Zahl - 64 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 32 Then Zahl = Zahl - 32 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 16 Then Zahl = Zahl - 16 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 8 Then Zahl = Zahl - 8 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 4 Then Zahl = Zahl - 4 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 2 Then Zahl = Zahl - 2 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If If Zahl >= 1 Then Zahl = Zahl - 1 Out$ = Out$ + "1" Else Out$ = Out$ + "0" End If Return Out$ End Function |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke das du dir die Mühe gemacht hast, ich hab aber selber mal nachgeforscht und habb erstmal nur die letzte ziffe mit 255 ersetzt... Aber deine Function Functioniert super ! Danke !
Ich habs befor du mir den Code gegebn hats mal ausprobiert mit der IP 192.168.10.255 und es hat geklappt, aber da nicht überall die Brodcast-IP 192.168.10.255 sondern vil 192.168.0.255 oder anders ist, finde ich deine Function praktisch (Kannste mal ins Codearchiv vil. stellen ^^) mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut, dass du wenigstens auch gebrauchen kannst ^^
Habe die gerade reingestellt. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group