UDP Netzwerk Auto Suche

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Firstdeathmaker

Betreff: UDP Netzwerk Auto Suche

BeitragMi, Apr 28, 2004 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMi, Apr 28, 2004 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 28, 2004 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMi, Apr 28, 2004 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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

BeitragMi, Apr 28, 2004 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

walski

Ehemaliger Admin

BeitragMi, Apr 28, 2004 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 28, 2004 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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 Wink). Falls du die PHP Lösung nimmst, kann ich dir da eventuell mit dem Script helfen und das ganze bei mir hosten Wink
 

ZAiMoN

BeitragMi, Apr 28, 2004 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

walski

Ehemaliger Admin

BeitragMi, Apr 28, 2004 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 28, 2004 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 28, 2004 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Evil or Very Mad . Aber das wird sich ja bald änder. Also falls du an dem Code interessiert bist, könnte ich ihn dir senden. Verwendungszweck ist hier ne p2p anwendung, und das ist auf TCP Basis, aber falls es dich doch interessiert kannst mich ja anschreiben.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Firstdeathmaker

BeitragMi, Apr 28, 2004 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

walski

Ehemaliger Admin

BeitragMi, Apr 28, 2004 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

StartNetGame()


Dann IPX auswählen und TADA, da ist die besagte Liste.

walski
buh!
 

BIG BUG

BeitragMi, Apr 28, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 28, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, wenn ich dann Morgen auf Arbeit bin und es nicht vergesse, dann schick ichs zu, anonsten erninner mich bitte dran per pn. Razz
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group