UDP Netzwerk Lib

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ToeB

Betreff: UDP Netzwerk Lib

BeitragSa, Jan 24, 2009 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Also da ich viel mit UDP programmiere und keine lust habe alles immer neu zu schreiben, weil ich zu faul bin und immer wieder gucken muss obs auch wirklich klappt,habe ich eine Functions-Lib zu dem Thema geschrieben. Sie beinhaltet folgendes :
Arrow Server / Client
Arrow Schnellstart (also man kann praktisch sofort spielen)
Arrow einfacher einbau in die Programme
Arrow Läuft flüssig und schnell
Arrow Ping / TimeOut Function
Arrow Auch local verwendbar (Also IP 127.0.0.1 -> dürfte nur etwas langsam laufen, wenn zwei fenster offen sind,liegt aber an BB und nicht an der Lib)
Arrow Spieleranzahl festlegbar
Arrow Server im Netztwerk suchen
Arrow Daten von den Servern ausgeben lassen
Arrow Disconnecten

So dann wollen wir mal die ganzen Functionen erläutern Wink (Heir nur mal die wichtigsten):

1.: UDP_Init(PlayerAnzahl% [, SendeMS%] [, TimeOutMS%])
Startet die Lib, stellt SendeMS,Timeout und spieleranzahl ein. Parameter sollten klar sein.

2.: UDP_HostGame%(PlayerName$[ , ServerName$] [, ServerPort])
Hostet ein Spiel, das programm gilt also als Host(Server). Den Port kann man angeben, sonst wird ein freier Port gesucht.

3.: UDP_JoinGame%(ServerIP$ , PlayerName$ [, ClientPort%] [, ServerPort] [,WaitMS] )
Tritt einem spiel mit der Gewünschten IP bei. ServerIP muss hier als String angegeben werden, wird intern umgewandelt. Den CleintPort kann man auswählen, schaltet man ihn auf 0 wird ein freier gesucht (ist vorteilhaft für Locales Testen (an einem PC)). Der Server Port muss angegeben werden, weil die Function sonst nicht weiß wohin sie die anfrage senden soll. Und WaitMS gibt an, wie lange die Function auf antwort warten muss (also z.B 5000, wartet sie 5sek, wenn sie bis dahin noch nichts erhalten hat beendet sie sich selber). Wenn die verbindung erfolgreich ist, gibt sie 1 zurück, wenn nicht 0. Ist der server voll, wird eine 2 zurückgegeben.

4.: UDP_Updat%e()
Empfängt alle nachrichten, wertet sie aus, erstellt neue spieler ect. Aktualisiert den ganzen Netzwerkkram. (am besten an den anfang der schleife stellen). Diese Function MUSS auf jeden fall aufgerufen werden, sonst funtz gar nichts.

5.: UDP_Send%(SendID% , SendString$ [,FromID] [,chat])
Sendet eine neue nachricht. SendID ist die ID wohin diese nachricht gesendet werden soll(SpielerID,0=Server,1-Spielernazahl=ClientID), SendString ist der String der gesendet werden soll (also z.b. : str$ = XPos(i)+","+yPos(i)+","+Jump(i)+Chr(13)+Chat(i)) . FromID ist die ID von wem die nachricht kommt (also wenn der Host z.B von allen die daten an alle weiterschikt, aber diese daten mit seiner ID, dann werden automatisch bei dem clienten die Daten der anderen clienten gleich der daten des Servers gesetzt, dafür ist das da). Läasst man FromID leer nimmt es automatisch die eigene ID. Chat ist eigentlich ein parameter den man außer acht allen kann, das ist nur wenn er 1 ist wird ein Byte mitgesendet, der angibt, das jetzt eine Chat nachricht folgt, dann muss man diese nämlich nicht in den sende String packen.

5.: UDP_Recv$([GetID%])
Gibt die zuletzt eingekommene nachricht aus. Wahlweise kann man auch den parameter GetID benutzen, damit gibt man an welche nachricht man auslesen möchte. Das sollte man tun, weil man sonst nachrichten von anderen spielern evtl. auslassen könnte. Also wieder zur guten alten ForNext schleife Wink

6.: UDP_End%()
Beendet die sitzung für das programm. Die anderen Clienten/der server löschen diesen spieler dann automatisch aus der Liste.

7.: UDP_CountServers%([, MaxServers%] [,WaitMS%] [,ServerPort%])
Diese Function sucht nach servern (nur im NETZWERK !) und speichert sie ab. MaxServers gibt die vermeindliche zahl an servern an (geschätzt). Kann man z.B. auf 1000 sezten, dann ist auf jden fall jeder sever angezeicgt Wink. WaitMs gibt wieder die zeit an wie lange die function nach servern suchen soll und ServerPort den port des Servers(falls angegeben). Die Function gibt die anzahl der gefundenen server wieder.

8.: UDP_GetServerInfo$(Index%/i])
Wenn vorher UDP_CountServers angewendet wurde, kann man hiermit die daten in einem string abfragen. (Also ServerName + IP:Port + Spieler/SpielerAnzahl).

Jeztzt kommen noch ein par system parameter :
[i]UDP_Error$/i] : Ist sie "1" hat der Server das spiel veralssen / beendet, ist sie "2:" dann hat ein Client das spiel verallsen/Beendet. Die ID von diesem steht hinter der "2:".

[i]UDP_Server%
: 1=Server, 2 = Client

UDP_StreamPort% : Beeinhaltet den Port von dem UDPStream

UDP_ServerName$ : ServerName =)

UDP_SelvID : Eigene ID

UDP_GetMsgID : Die ID von der letzten empfangenen Nachricht

UDP_GteMsgType : Der MSG_Typ der letzten empfangenen Nachricht.

So das wars auch schon, wer mehr wissen will guckt sich das beispiel an Wink

Hier die Lib :
Code: [AUSKLAPPEN]
;*****************************************
;****************** UDP-Lib **************
;******** By Tobias "ToeB" Hendricks *****
;*****************************************
;******************* ©2009 ***************
;*****************************************

Global UDP_Stream,UDP_StreamPort,UDP_ServerName$
Global UDP_Playeranzahl,UDP_SendMs,UDP_SendTime,UDP_TimeoutMS,UDP_SelvID
Global UDP_GetMsgID,UDP_GetMsgType,UDP_SendMsg,UDP_Server,UDP_RecvString$,UDP_Error$
Global UDP_SendMsgID

Global UDP_S_Anzahl

Const UDP_NORM_MSG = 1
Const UDP_CHAT_MSG = 2
Const UDP_NEWP_MSG = 3
Const UDP_NOPL_MSG = 4
Const UDP_GETS_MSG = 5
Const UDP_ENDG_MSG = 6

Dim UDP_ON(0),UDP_IP(0),UDP_Name$(0),UDP_Port(0),UDP_NewP(0),UDP_Msg$(0),UDP_TimeOut(0),UDP_Ping(0,0)

Dim UDP_S_ON(0),UDP_S_Name$(0),UDP_S_IP(0),UDP_S_Port(0),UDP_S_Spieler(0,0)

Function UDP_Init(FPlayerAnzahl=8,SendMS=25,FTimeOutMs=1000)
   UDP_Playeranzahl = FPlayerAnzahl
   UDP_SendTime = FSendMS
   UDP_SendMS = MilliSecs()
   UDP_TimeOutMS = FTimeOutMS
   Dim UDP_On(UDP_Playeranzahl),UDP_IP(UDP_Playeranzahl),UDP_Name$(UDP_Playeranzahl),UDP_Port(UDP_Playeranzahl)
   Dim UDP_NewP(UDP_Playeranzahl),UDP_Msg(UDP_Playeranzahl),UDP_TimeOut(UDP_Playeranzahl),UDP_Ping(UDP_Playeranzahl,1)
End Function

Function UDP_HostGame(FName$="Unnamed",FServerName$="LocalServer",FPort=0)
   UDP_Stream = CreateUDPStream(FPort)
   If UDP_Stream = 0 Return 0
   UDP_StreamPort = UDPStreamPort(UDP_Stream)
   UDP_Name(0) = FName$
   UDP_ON(0) = 1
   UDP_ServerName = FServerName   
   UDP_Server = 1
   Return 1
End Function

Function UDP_JoinGame(FIP$,FName$,FPort=0,FServerPort=0,FWait=1000)
   Local IIP = UDP_IntIP(FIP)
   UDP_Stream = CreateUDPStream(FPort)
   WriteByte(UDP_Stream,UDP_NEWP_MSG)
   WriteString(UDP_Stream,FName$)
   SendUDPMsg(UDP_Stream,IIP,FServerPort)
   UDP_Server = 0
   Delay 100
   Local IWaitMs = MilliSecs() + FWait
   Repeat
      If RecvUDPMsg(UDP_Stream)
         TmpByte = ReadByte(UDP_Stream)
         DebugLog "MSG Recover from Server : "+TmpByte
         Select TmpByte 
         Case UDP_NEWP_MSG
            UDP_SelvID = ReadInt(UDP_Stream)
            UDP_On(SelvID) = 1
            UDP_Name(SelvID) = FName$
            UDP_ON(0) = 1
            UDP_Name$(0) = ReadString(UDP_Stream)
            UDP_IP(0) = IIP
            UDP_PORT(0) = UDPMsgPort(UDP_Stream)
            UDP_TimeOut(0) = MilliSecs() + UDP_TimeOutMS
            For i = 1 To UDP_Playeranzahl
               UDP_On(i) = ReadByte(UDP_Stream)
               If UDP_On(i) = 1
                  UDP_NAme(i) = ReadString(UDP_Stream)
                  UDP_TimeOut(i) = MilliSecs() + UDP_TimeOutMS
               EndIf
            Next
            Return 1
         Case UDP_NOPL_MSG
            Return 2
         End Select
      EndIf
      If IWaitMs <= MilliSecs() Return 0
   Forever
End Function

Function UDP_Update()
   UDP_SendMsg = 0
   If UDP_SendMS <= MilliSecs()
      UDP_SendMsg = 1
      UDP_SendMS = MilliSecs() + UDP_MsgTime
   EndIf
   For i = 0 To UDP_Playeranzahl
      UDP_Msg(i) = ""
   Next
   TmpRecv = RecvUDPMsg(UDP_Stream)
   If TmpRecv
      tmpRecv2 = tmpRecv   
      While tmpRecv = tmpRecv2
         UDP_GetMsgType = ReadByte(UDP_Stream)
         Select UDP_GetMsgType
            Case UDP_NORM_MSG,UDP_CHAT_MSG
            While Not Eof(UDP_Stream)   
               UDP_GetMsgID = ReadInt(UDP_Stream)
               UDP_RecvString = ReadString(UDP_Stream)            
               UDP_Msg(UDP_GetMsgID) = UDP_RecvString
               UDP_TimeOut(UDP_GetMsgID) = MilliSecs() + UDP_TimeOutMS
               UDP_Ping(UDP_GetMsgID,1) = MilliSecs() - UDP_Ping(UDP_GetMsgID,0)
            Wend
         Case UDP_NEWP_MSG
            If UDP_Server = 1
               TmpID = 0
               For i = 1 To UDP_Playeranzahl
                  If UDP_On(i) = 0 TmpID = i : Exit
               Next
               If TmpID = 0
                  TmpPort = UDPMsgPort(UDP_Stream)
                  TmpIP = UDPMsgIP(UDP_Stream)
                  WriteByte(UDP_Stream,UDP_NOPL_MSG)
                  SendUDPMsg(UDP_Stream,TmpIP,TmpPort)
               Else                  
                  UDP_On(TmpID) = 1
                  UDP_Port(TmpID) = UDPMsgPort(UDP_Stream)
                  UDP_IP(TmpID) = UDPMsgIP(UDP_Stream)
                  UDP_Name(TmpID) = ReadString(UDP_Stream)
                  WriteByte(UDP_Stream,UDP_NEWP_MSG)
                  WriteInt(UDP_Stream,TmpID)
                  WriteString(UDP_Stream,UDP_Name(0))
                  For i = 1 To UDP_Playeranzahl
                     WriteByte(UDP_Stream,UDP_On(i))
                     If UDP_On(i) = 1
                        WriteString(UDP_Stream,UDP_Name(i))
                     EndIf
                  Next
                  SendUDPMsg(UDP_Stream,UDP_IP(TmpID),UDP_Port(TmpID))
                  For i = 1 To UDP_Playeranzahl
                     If i <> TmpID And UDP_ON(i) = 1
                        WriteByte(UDP_Stream,UDP_NEWP_MSG)
                        WriteInt(UDP_Stream,TmpID)
                        WriteString(UDP_Stream,UDP_Name(i))
                        SendUDPMsg(UDP_Stream,UDP_IP(i),UDP_Port(i))
                     EndIf
                  Next    
               EndIf
               UDP_TimeOut(TmpID) = MilliSecs() + UDP_TimeOutMS
            Else
               TmpID = ReadInt(UDP_Stream)
               UDP_On(TmpID) = 1
               UDP_Name(TmpID) = ReadString(UDP_Stream)
               UDP_TimeOut(TmpID) = MilliSecs() + UDP_TimeOutMS
            EndIf
         Case UDP_GETS_MSG            
            TmpIP = UDPMsgIP(UDP_Stream)
            TmpPort = UDPMsgPort(UDP_Stream)
            ICount = 0
            For i = 1 To UDP_Playeranzahl
               If UDP_On(i) = 1 ICount = ICount + 1
            Next
            WriteString(UDP_Stream,UDP_ServerName$)
            WriteInt(UDP_Stream,ICount)
            WriteInt(UDP_Stream,UDP_Playeranzahl)
            SendUDPMsg(UDP_Stream,TmpIP,TmpPort)      
         Case UDP_ENDG_MSG
            If UDP_Server = 1
               TmpID = ReadInt(UDP_Stream)
               UDP_On(TmpID) = 0
               UDP_Error = "2:"+TmpID
               For i = 1 To UDP_Playeranzahl
                  If i <> TmpID And UDP_ON(i) = 1
                     WriteByte(UDP_Stream,UDP_ENDG_MSG)
                     WriteInt(UDP_Stream,TmpID)
                     SendUDPMsg(UDP_Stream,UDP_IP(i),UDP_Port(i))
                  EndIf
               Next    
            Else
               TmpID = ReadInt(UDP_Stream)
               UDP_On(TmpID) = 0
               If TmpID = 0 UDP_Error = "1" Else UDP_Error = "2:"+TmpID
            EndIf
         End Select
         tmpRecv2 = RecvUDPMsg(UDP_Stream)
      Wend          
   EndIf
   For i = 0 To UDP_Playeranzahl
      If i <> UDP_SelvID
         If UDP_On(i) = 1
            If UDP_TimeOut(i) <= MilliSecs()
               UDP_On(i) = 0
               If i = 0 UDP_Error = "1"
               If i > 0 UDP_Error = "2:"+i
            EndIf
         EndIf
      EndIf
   Next 
End Function

Function UDP_Send(FId,FLine$,FFrom=-1,FChat=0)
   If FFrom = -1 FFrom = UDP_SelvID
   Local FType
   If FChat = 0
      FType = UDP_NORM_MSG
   ElseIf FChat = 1
      FType = UDP_CHAT_MSG
   EndIf
   If UDP_SendMsg
      WriteByte(UDP_Stream,FType)
      WriteInt(UDP_Stream,FFrom)      
      WriteString(UDP_Stream,FLine$)
      SendUDPMsg(UDP_Stream,UDP_IP(Fid),UDP_Port(Fid))      
      UDP_Ping(FId,0) = MilliSecs()   
   EndIf
End Function

Function UDP_Recv$(FID=-1)
   If FID = -1
      If UDP_GetMsgType <> UDP_NEWP_MSG
         Return UDP_RecvString$
      EndIf
   ElseIf FID => 0
      If UDP_Msg(FID) <> "" Return UDP_Msg(FID)
   EndIf
   Return ""
End Function

Function UDP_End()
   If UDP_Server = 0
      WriteByte(UDP_Stream,UDP_ENDG_MSG)
      WriteInt(UDP_Stream,UDP_SelvID)
      SendUDPMsg(UDP_Stream,UDP_IP(0),UDP_PORT(0))
   Else
      For i = 1 To UDP_Playeranzahl
         WriteByte(UDP_Stream,UDP_ENDG_MSG)
         WriteInt(UDP_Stream,0)
         SendUDPMsg(UDP_Stream,UDP_IP(i),UDP_Port(i))
      Next
   EndIf
   Delay 250
   CloseUDPStream(UDP_Stream)
End Function

Function UDP_CountServers(FResort=100,FWait=5000,FServerPort=0)
   FResort = FResort - 1
   Dim UDP_S_ON(FResort),UDP_S_Name$(FResort),UDP_S_IP(FResort),UDP_S_Port(FResort),UDP_S_Spieler(FResort,1)
   Local UDP_TmpStream = CreateUDPStream()
   Local BIP = UDP_IntIp(UDP_BroadcastIP())
   Local ICount = 0
   WriteByte(UDP_TmpStream,UDP_GETS_MSG)
   SendUDPMsg(UDP_TmpStream,BIP,FServerPort)
   Delay 100
   Local IWait = MilliSecs() + FWait
   Repeat
      If RecvUDPMsg(UDP_TmpStream)
         TmpID = -1
         For i = 0 To FResort
            If UDP_S_ON(i) = 0 TmpID = i : Exit
         Next
         If TmpID = -1 Exit
         UDP_S_ON(TmpID) = 1
         UDP_S_Name$(TmpID) = ReadString(UDP_TmpStream)
         UDP_S_Spieler(TmpID,0) = ReadInt(UDP_TmpStream)
         UDP_S_Spieler(TmpID,1) = ReadInt(UDP_TmpStream)
         UDP_S_IP(TmpID) = UDPMsgIP(UDP_TmpStream)
         UDP_S_Port(TmpID) = UDPMsgPort(UDP_TmpStream)
         ICount = ICount + 1
      EndIf
   Until IWait <= MilliSecs()
   UDP_S_Anzahl = ICount
   CloseUDPStream(UDP_TmpStream)
   Return ICount
End Function

Function UDP_GetServerInfo$(FIndex)
   FIndex = FIndex -1
   If FIndex > UDP_S_Anzahl Return ""
   If FIndex < 0 Return ""
   Local IStr$ = UDP_S_Name(FIndex) + " | "
   IStr = IStr + DottedIP(UDP_S_IP(FIndex))+":"+UDP_S_Port(FIndex)+" | "
   IStr = IStr + UDP_S_Spieler(FIndex,0)+"/"+UDP_S_Spieler(FIndex,1)
   Return IStr
End Function
   


Function UDP_GetPlayerStat(FIndex)
   If UDP_ON(FIndex) = 1 Return 1
   Return 0
End Function

Function UDP_GetPlayerName$(FIndex)
   If UDP_ON(FIndex) = 1 Return UDP_Name(FIndex)
   Return 0
End Function

Function UDP_GetPlayerIP(FIndex)
   If UDP_ON(FIndex) = 1 Return UDP_IP(FIndex)
   Return 0
End Function

Function UDP_GetPlayerPing(FIndex)
   If UDP_ON(FIndex) = 1 Return UDP_Ping(FIndex,1)
End Function

Function UDP_IntIP(IP$)
   If Instr(IP$,".") <> 0 a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   If Instr(IP$,".") <> 0 a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   If Instr(IP$,".") <> 0 a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   a4=Int(IP$)
   Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4
End Function

Function UDP_BroadcastIP$()
   CountHostIPs("")
   Local IP$ = DottedIP(HostIP(1))   
   Local Subnetmask$ = "255.255.255.0"   
   Local IPDigits[3], SubnetDigits[3]
   Local pos, i    
   
   For i = 0 To 3
      pos = Instr( IP$, "." )
      If pos > 0
         IPDigits[i] = Left( IP$, pos -1 )
         IP$ = Mid( IP$, pos +1 )
      Else
         IPDigits[i] = IP$
      EndIf
   Next
      
   For i = 0 To 3
      pos = Instr( Subnetmask$, "." )
      If pos > 0
         SubnetDigits[i] = Left( Subnetmask$, pos -1 ) Xor $FF
         Subnetmask$ = Mid( Subnetmask$, pos +1 )
      Else
         SubnetDigits[i] = Subnetmask$ Xor $FF
      EndIf
   Next
   
   For i = 0 To 3
      IPDigits[i] = IPDigits[i] Or SubnetDigits[i]
   Next
      
   Return IPDigits[0] +"." +IPDigits[1] +"." +IPDigits[2] +"." +IPDigits[3]    
End Function


Und hier ein kleines Beispiel :
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Include "UDPLib.bb"

Global player = 5

UDP_Init(player,25,5000)
Dim MX(player),MY(Player)

HOST = Input("(1) Host or (2) Join ? ")
If HOST = 1
   Name$ = "ToeB";Input("Name : ")
   SName$ = "LocalTestingServer";Input("Server Name : ")
   UDP_HostGame(Name,SName,8000)
   AppTitle "Host"
Else
   count = UDP_CountServers(5,500,8000)
   Print "Server gefunden : "+count
   For i = 1 To count
      Print UDP_GetServerInfo(i)
   Next
   Name$ = "Client"
   IP$ = DottedIP(UDP_S_IP(0))
   Port = 0
   Print "Connecting to IP : "+IP
   TmpMsg = UDP_JoinGame(IP,Name,0,8000,1000)
   If TmpMsg = 0 Or TmpMsg = 2 Print "Error : "+TmpMsg+" !":Delay 2000:End
   AppTitle "Client"
EndIf

Repeat
   FPS_C = FPS_C + 1
   If FPS_Ms <= MilliSecs() FPS = FPS_C : FPS_C = 0 : FPS_Ms = MilliSecs()+1000
   UDP_Update()
   MX(UDP_SelvID) = MouseX()
   MY(UDP_SelvID) = MouseY()
   If UDP_Server = 1
      For i = 1 To player
         If UDP_GetPlayerStat(i) = 1
            For j = 0 To player
               If i <> j
                  If UDP_GetPlayerStat(j) = 1
                     UDP_Send(i,MX(j)+","+MY(j),j)
                  EndIf
               EndIf
            Next
         EndIf
      Next
   Else
      UDP_Send(0,MX(UDP_SelvID)+","+MY(UDP_SelvID))
   EndIf
   For i = 0 To player
      LocalString$ = UDP_Recv(i)
      If LocalString$ <> ""
         MX(i) = Int(Left(LocalString$,Instr(LocalString$,",")-1))
         MY(i) = Int(Mid(LocalString$,Instr(LocalString$,",")+1,Len(LocalString$)))
      EndIf
   Next 
   Text 0,0,"fps:"+FPS
   For i = 0 To player
      If UDP_GetPlayerStat(i) = 1
         Text 0,13+i*13,i+".: "+UDP_GetPlayerPing(i);i+".: "+UDP_GetPlayerName(i)+" | "+DottedIP(UDP_GetPlayerIP(i))+" | "+MX(i)+","+MY(i)
         Text MX(i),MY(i)-13,UDP_GetPlayerName(i),1,1
         Oval MX(i)-5,MY(i)-5,10,10,0
      EndIf
   Next   
   Select Left(UDP_Error,1)
   Case "1"
      Cls
      Flip
      Print "Der server hat das spiel verlassen"
      Delay 2000
      End
   Case "2"
      TmpID = Int(Mid(UDP_Error,Instr(UDP_Error,":")+1,Len(UDP_Error)))
      DebugLog "Spieler "+TmpID+" hat das spiel veralssen !"
      UDP_Error = ""
   End Select
   Flip
   Cls
Until  KeyHit(1)
UDP_End()
End


Und hier die DECLS :
Code: [AUSKLAPPEN]
.lib " "
UDP_Init%(PlayerAnzahl%, SendeMS%,  TimeOutMS%)
UDP_HostGame%(Name$, ServerName$, Port%)
UDP_JoinGame%(ServerIP$, Name$, Port%, ServerPort%, Wait%)
UDP_Update%()
UDP_Send%(SendID%, SendMsg$, FromID%, SendMsgType%)
UDP_Recv$(FromID)
UDP_CountServers%(MaximalServer%, WaitMS%, ServerPort%)
UDP_GetServerInfo$(Index%)
UDP_GetPlayerStat%(Index%)
UDP_GetPlayerName$(Index%)
UDP_GetPlayerIP%(Index%)
UDP_GetPlayerPing%(Index%)
UDP_IntIP%(IPString$)
UDP_BroadcastIP$()
UDP_End()

UDP_StreamPort%()
UDP_ServerName$()
UDP_Playeranzahl%()
UDP_SelvID%()
UDP_GetMsgID%()
UDP_GetMsgType%()
UDP_Server%()
UDP_RecvString$()
UDP_Error$()


Viel spaß damit !

Falls jemand sich doch ünberwinden sollte diese Lib zu nutzen, wäre ich dankbar auch in dem spiel/programm erwähnt zu werden Wink

mfg ToeB

P.S: Fehler bitte bei mir melden !
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!
  • Zuletzt bearbeitet von ToeB am Sa, Jan 24, 2009 14:43, insgesamt einmal bearbeitet

Chrise

Betreff: Re: UDP Netzwerk Lib

BeitragSa, Jan 24, 2009 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab zwar jetzt keine Zeit das auszuprobieren, aber eins kann ich garantieren:
das werde ich!

Sowas finde ich mal nützlich Smile
Eine Frage hätte ich da aber gleich und zwar,
Bei mir war es, als ich mit Netzwerkspielen rumprobiert habe, dass irgendwann der Ping zu hoch gegangen ist obwohl die Verbindung noch einwandfrei gewesen sein müsste, bzw. waren die Datenübertragungen manchmal zu stark zeitversetzt. Ist das bei deinem Code auch so, oder nicht?

Danke^^

Eingeproggt

BeitragSa, Jan 24, 2009 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Find es ein wenig unpraktisch, dass du alles mit Dims machst... vor allem die Sache mit dem Server suchen und man soll angeben wieviel Server gefunden werden sollen. Natürlich will man alle haben was sonst?

Ansonsten gibts aber nix zu meckern, hab selbst mal so ne Lib angefangen aber dann mittendrin aufgehört weil mir iwie der Sinn des Ganzen entgangen is. Meine Lib war nämlich kein eigenes System sondern nur eine Art wrappen der BB-Befehle mit Sicherheitsabfragen ^^
Trotzdem: Sowas is dann eine sehr gute Referenz für sich selbst.

mfG, Christoph

PS: "SelvID" ist nicht ganz richtig, es heißt "SelfID".
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragSa, Jan 24, 2009 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja man könnte es auch mit Types machen, aber wie will man dann die Variablen (X/Y/ZPos etc. ) dann damit kombinieren ? Da braüchte man dann eine zeite Type-Instance und die muss man dann so einrichten das die IDs gleichsind, dann muss man ständig suchen welcher TYpe jetzt die iD x hat usw... Hat schon einen sinn das ich mich für arrays endschieden habe Wink

Und das mit dem Serversuchen hab ich nur mit arrays gemacht, damit der Nutzer der Lib einfacher auf die Serverdaten zugreifen kann anhand der Indexnummer... Sonst müsste wieder endlos gesucht werden bis man das gefunden hat wonach man sucht =)

Aber trotzdem danke für das gute feedback Very Happy

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!

juse4pro

BeitragSa, Jan 24, 2009 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
nicht schlecht, erinnert mich stark an DirectPlay nur mit UDP allein Wink

werde mal gucken ob sich was ergibt Very Happy
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group