UDP Netzwerk Auto Suche
Übersicht

![]() |
FirstdeathmakerBetreff: UDP Netzwerk Auto Suche |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin gerade dabei mir die UDP Funktionen anzueignen, habe es soweit auch geschafft, aber nun frage ich mich: Wie bekomme ich es hin, dass ich:
Einen Server aufmache, einen Client aufmache, und dann nach offenen Spielen suchen kann. Ich möchte später mal so etwas wie bei fast allen neueren Spielen herausbekommen: Einer macht ein Spiel auf, und alle anderen sehen es, ohne dass sie die IP irgendwi eingeben müssen. Ich wüsste jetzt im Moment nur die Möglichkeit, alle IP-Adressen durchzugehen die es gibt, aber ich schätze dass würde ein wenig lange dauern. Also, falls mir jemand einen Tip geben könnte wäre ich sehr dankbar. |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der einfachste Weg ist und bleibt wohl PHP/Perl o.ä.
Wenn jemand ein Spiel aufmacht, rufst du per TCP von BB aus ein PHP Script auf, welches die IP auf Webspace speichert (in MySQL Tabelle oder einfach in ner Text Datei). Wenn jemand nun nach spielen sucht ruftst du per TCP ein zweites Script aus, was die Daten vom Webspace abruft. Damit alte Spiele nicht für immer auf dem Webspace bleiben darfst du aber nicht vergessen noch ein 3. Skript einzuabauen, welches die Server wieder vom Webspace löscht, wenn sie das Spiel beenden bzw. wenn Clients nicht mehr bei ihnen joinen können (um zu verhindern das Server die abgestürzt sind in der Liste bleiben) Noch einfacher wäre natürlich ein Server der immer online ist und das ganze managed, aber ich nehme mal an, dass dir sowas wie den meisten von uns nicht zur verfügung steht |
||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und was ist wenn ich das ganze nur im Netzwerk spielen möchte? | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da geht das ja auch - zumindest wenn das Netzwerk auch mit dem Internet verbunden ist. Wenn nicht... dann ... gute Frage - wüsste ich auch mal gerne wie das dann machbar ist ![]() |
||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich meine, bei AoE oder UT oder, um mal hier ein Spiel ausm Forum zu nennen: Dogfight geht es ja auch. Es muss also irgend möglich sein. Ich kann mir nur eben nicht vorstellen, dass diese Spiele immer alle möglichen IP´s durchgehen. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Man benutzt dazu sogenannte "Broadcast-Daten".
Sprich: Euer Client sendet irgendein Signal ans Netz und alle angeschlossenen Rechner empfangen es. Die Rechner die es empfangen haben dadurch eben die IP Adresse des Senders und können nun zum Beispiel dem Sender ein "Hier, ich bin ein Server, IP-Adresse blablabla" zurückschicken. Das Problem: Bei meiner 5 Minuten Google Analyse ließ sich leider niucht sehr viel zur Umsetzung des ganzen herausfinden. walski |
||
buh! |
mOnK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei den meisten Spielen (und auch bei Browsern wie ASE) wird ein Master Server benutzt. Sowas wird aber für uns Blitz coder wohl nie erreichbar sein. Die Dinger sind schliesslich 365 Tage im Jahr online und brauchen auch eine gewisse Bandbreite. Das kostet Geld ![]() Die PHP Lösung ist da wohl die einfachste, auch wenn ich mich (bis jetzt) noch nicht mit Netzwerkprogrammierung mit Blitz beschäftigt habe. Wird aber wohl kommen (spätestens beim nächsten Projekt ![]() ![]() |
||
ZAiMoN |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also im netzwerk würde ich eine lokale platte erstellen wo halt jeder zugreifen kann dann die ip jewalls in den ordner/festplatte in eine bestimmte textdatei speichern und der andere kann sie dann aufrufen.
Übers netzwerk könnte man ja ruhig die ip auch schnell eintippen da der andere in der nähe ist -.- |
||
In Online Games Gilt:
Luck Beats Skill Lag Beats Skill Cheat Beats Skill |
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ganz zur Not könnte man auch Directplay verwenden!
Dort gibt es diese besagte Liste aller offenen Spiele im lokalen Netz. Sobald man dann ein Spiel auswählt, kann man dann ja manuell mit UDP oder TCP weitermachen, denn dann hat man ja die IP! walski |
||
buh! |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der BB Onlinehilfe steht aber bei DirektPlay, dass man eine IP angeben muss. Irgend wie muss das doch gehen....
Dieses Broadcast Signal wird doch an alle Rechner eines Netztwerkes gesendet... Ich versuch mal eine Sache: Ich sende an alle möglichen IP-Nummern eine message und stoppe die Zeit wie lange das dauert... |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab es so gemacht auf Arbeit, das die Clients sich erstmal am server anmelden (das kannst du wunderbar mit AcceptTCPStream machen) und nach einem gewissen regelmäßigem Zeitintervall einen Heartbeat senden, um zu sagen das sie noch am leben sind, und der server prüft immer z.B. jede 30 Sekunden ob jeder client noch da ist, meldet sich ein Client z.B. eine Minute lang nicht, so wird er einfach gelscht, also das Objekt in einem Typ mit den Verbindungsdaten wird gelöscht. Was den Server anbelangt, das einzigste Problem was ich damit hab nen Masterserver aufzusetzen ist das auf meinem Server derzeit redhat drauf ist, und BB nunmal bisher nicht in der Lage ist auf Linux zu laufen ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für eure vielen Antworten, ich glaube ich weis jetzt wie ich es machen kann. THX
@ regaa Ich habe zwar jetzt noch eine andere Methode gefunden, aber ich werde deine auch mal ausprobieren. Könntest du mir den Code mal schicken? |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
walskiEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] StartNetGame() Dann IPX auswählen und TADA, da ist die besagte Liste. walski |
||
buh! |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier, kannste vielleicht als Basis verwenden:
Code: [AUSKLAPPEN] Graphics 600, 460, 16, 2 Type NetHost Field IP% Field Port% Field Ping% Field GameInfo$ End Type Global Stream Global Port% Global StartTime% Global HostCounter% Const N_MESSAGE% = 0 Const N_REQUEST% = 1 Const N_ANSWER% = 2 Const COL_INPUT% = 0 Const COL_LIST% = 1 Const COL_MESSAGE% = 2 Const C_BroadCastIPs% = 1 ;Anzahl der BroadCastIPs - 1 Dim BroadCastIP%(C_BroadCastIPs%) BroadCastIP%(0)=ipint("192.168.0.255") BroadCastIP%(1)=ipint("192.168.1.255") SetCol(COL_INPUT%) ;Port% = Input$("Port:") Port% = 44444 ServerInfo$ = Input$("Deine Serverinfo:") Stream=CreateUDPStream (port%) If Stream Then CountHostIPs ("") Print "Socket erstellt auf " + DottedIP(HostIP(1)) + "|" + UDPStreamPort (Stream) Else RuntimeError "Socket konnte nicht erstellt werden!" EndIf ;IP% = IPInt(Input$("IP: ")) ;Port% = Input$("JoinPort: ") HostRefresh() Repeat If RecvUDPMsg (Stream) Then Select ReadByte (Stream) Case N_MESSAGE% ;Normale Nachricht SetCol(COL_MESSAGE%) Print "Nachricht von " + ServerInfo$() + ": " + ReadString$(Stream) Case N_REQUEST% ;Spielanfrage SendMsg(UDPMsgIP (Stream),N_ANSWER%,ServerInfo$) Case N_ANSWER% Host.NetHost = New NetHost Host\Ping% = MilliSecs() - StartTime% Host\IP% = UDPMsgIP (Stream) Host\Port% = UDPMsgPort (Stream) Host\GameInfo$ = ReadString$ (Stream) HostCounter% = HostCounter% + 1 SetCol(COL_LIST%) Print + HostCounter% + ": " + ServerInfo$() + " Ping: " + Host\Ping% + " Info: " + Host\GameInfo$ End Select EndIf Key% = GetKey() Select Upper(Chr$(Key%)) Case Chr$(13) ;Return SetCol(COL_INPUT%) HostNumber% = Input$("Hostnummer:") SendMsg(Number2IP(HostNumber%),N_MESSAGE%,Input$("Deine Nachricht:")) Case Chr$(27) ;ESC CloseUDPStream(Stream) End Case "R" ;Refresh HostRefresh() Case "P" ;Change Port SetCol(COL_INPUT%) Port% = Input$("JoinPort: ") End Select Forever Function SendMsg(IP%, MsgID%, Message$) WriteByte Stream, MsgID% WriteString Stream, Message$ SendUDPMsg Stream, IP%, Port% End Function Function Number2IP(Number%) For Host.NetHost = Each NetHost i% = i% + 1 If i% = Number% Then Return Host\IP% Next End Function Function HostRefresh() For Host.NetHost = Each NetHost Delete Host.NetHost Next HostCounter% = 0 SetCol(COL_LIST%) Print "Hostliste:" For i% = 0 To C_BroadCastIPs% SendMsg(BroadCastIP%(i%), N_REQUEST%, "") Next StartTime% = MilliSecs() End Function Function ServerInfo$() Return DottedIP(UDPMsgIP (Stream)) + "|" + UDPMsgPort (Stream) End Function Function SetCol(Col%) Select Col% Case COL_INPUT% Color 180, 180, 180 Case COL_LIST% Color 230, 230, 0 Case COL_MESSAGE% Color 255, 0, 0 End Select End Function ;Von DC geklaut(thx): Function ipint(inputIP$) ;-> wandelt ip$ in interger um Local break1,break2,break3,add1,add2,add3,add4,ipreturn ; break1 = Instr(inputIP$,".") ; break2 = Instr(inputIP$,".",break1+1) ; break3 = Instr(inputIP$,".",break2+1) ; add1 = Mid(inputIP$,1,break1-1) ; add2 = Mid(inputIP$,break1+1,break2-1) ; add3 = Mid(inputIP$,break2+1,break3-1) ; add4 = Mid(inputIP$,break3+1) ; ipreturn=(add1 Shl 24) + (add2 Shl 16) + (add3 Shl 8) + add4 ; Return ipreturn ; End Function |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, wenn ich dann Morgen auf Arbeit bin und es nicht vergesse, dann schick ichs zu, anonsten erninner mich bitte dran per pn. ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group