Netzwerkproblem UDP
Übersicht

SharkBetreff: Netzwerkproblem UDP |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Community,
zur Vorgeschichte zu diesem Problem hab ich nur zusagen, dass ich mit bnetex versucht habe eine stabile und funktionierende Verbindung zu erhalten, doch dies gelang mir nicht und darum hab ich versucht in B3d nochmal den nicht funktionierenden Code von BnetEx nach zu programmieren. Leider funktionierte es immer noch nicht und ich muss darauß schließen, dass es ein Problem mit meiner Denkweise oder mit dem Code gibt. Der Code, wie ich finde, ist etwas zu lange, dennoch poste ich den hier: Code: [AUSKLAPPEN] ;Shark Test!!!
Global key Type FMessage Field zeilenpos% Field txt$ End Type Type TClient Field id% Field ip$ Field port% Field stream End Type Global message_counter% Global message_max%=20 Global eingabe$ Global True_eingabe Global client_id% Type FServer Field Stream Field Port% End Type Type FClient Field Stream Field Port Field Ip Field Accept_connection End Type Connection(0,8000,"127.0.0.1") Function Connection(mode% , port% , ip$ = False) Select mode ;Mode = dedicated Case 2 Create_FServer(port%,2) ;Mode = Server Case 1 Create_FServer(port%,1) Create_FClient(port% , "127.0.0.1" , False) ;Mode = Client Case 0 Create_FClient(port%,ip$) End Select Runtime(mode) End Function Function Runtime(mode%) Local ende% = False Repeat Cls key = GetKey() Text(25,540,"Um eine Nachricht zu verfassen, druecke Eingabetaste") If MilliSecs() - ms_timer >= ms_rate ms_timer = MilliSecs() Select mode Case 1 update_server() update_client() Case 0 update_client() Case 2 update_server() End Select EndIf If mode <> 2 Then message() draw_message() EndIf Flip() Until KeyHit(1) End End Function Function Create_FServer(wPort,mode) t.FServer = New FServer t\Port = wport AppTitle = "Server ver." + Version Graphics (800 , 600 , 16,2) SetBuffer BackBuffer() t\Stream = CreateUDPStream(Port) If t\stream=0 Then RuntimeError"Stream:Error Number 1" End EndIf DebugLog "Server gestartet End Function Function Update_server() ;Local id% For t.FServer = Each FServer If RecvUDPMsg(t\stream) If ReadAvail(t\Stream)>0 Then Select ReadByte(t\stream) Case 1 client_id = client_id + 1 Local Client.TClient = New TClient Client\id = client_id Client\ip = UDPMsgIP(t\stream) Client\port = UDPMsgPort(t\stream) client\stream = t\stream DebugLog "Clientliste test" DebugLog Client\id DebugLog Client\ip DebugLog Client\port ;Nachricht zum Client wieder senden, dass er mit spielen darf oder net! WriteByte(client\stream,11) SendUDPMsg(client\stream,client\ip,client\port) DebugLog ("Nachricht zum Client gesendet") Case 20 Local message$ = ReadLine(t\stream) DebugLog message For Client.Tclient = Each Tclient WriteByte(client\stream,21) WriteLine(client\stream,message) SendUDPMsg(client\stream,client\ip,client\port) DebugLog("Narchricht an"+client\ip+"gesendet") Next Case 100 DebugLog "Pong" End Select EndIf EndIf Next End Function Function INT_IP(IP$) a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) 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 Create_FClient(Port, Ip$,connection=True) Local t.FClient = New FClient t\port = port t\ip =int_ip( ip$ ) AppTitle = "Server ver." + Version Graphics (800 , 600 , 16,2) t\stream = CreateUDPStream(Port) If t\stream=0 Then RuntimeError"Stream:Error Number 1" End EndIf ;VerbindungsAnfrage! WriteByte(t\stream,1) DebugLog("Verbindungsanfrage") SendUDPMsg(t\stream,t\ip,t\port) If connection = False update_server() EndIf If connection = True Local accept_connection_ms% = MilliSecs() Local accept_connection_ping% = 4000 Repeat For t.FClient = Each FClient If RecvUDPMsg(t\stream) If ReadAvail(t\Stream)>0 Then Select ReadByte(t\stream) Case 1 DebugLog("Anmeldung auf dem Server erfolgreich") Accept_connection = True Case 0 DebugLog "Error" RuntimeError "Join:Error Number 2" End Select EndIf EndIf Next Text 400 , 300 , "Wait..." Flip Until Accept_connection = True EndIf End Function Function update_client() For t.FClient = Each Fclient If RecvUDPMsg(t\stream) If ReadAvail(t\Stream)>0 Then Select ReadByte(t\stream) Case 21 message_counter = message_counter + 1 m.FMessage = New FMessage m\txt = ReadLine(t\stream) m\zeilenpos = message_counter * 13 DebugLog "FMESSAGE" DebugLog m\txt DebugLog m\zeilenpos End Select EndIf EndIf Next End Function Function send_message(message$) For t.FClient = Each Fclient If message <> "" Or " " WriteByte(t\stream,20) WriteLine(t\stream,message$) SendUDPMsg(t\stream,t\ip,t\port) DebugLog "Nachricht: "+message+"gesendet" EndIf Next End Function Function message() If true_eingabe = 0 Then If KeyHit(28) Then true_eingabe = 1 FlushKeys() EndIf EndIf If true_eingabe = 1 Then Text(20,40,"TRUE") If KeyHit( 14 ) And eingabe <> "" Then eingabe = Left(eingabe , Len(eingabe) - 1) If key > 31 And key < 127 eingabe$ = eingabe$ + Chr(key) EndIf If KeyHit(28) Then send_message(eingabe$) eingabe = "" FlushKeys() true_eingabe = 0 EndIf EndIf Text(30,500,eingabe$+"|") End Function Function draw_message() For m.FMessage = Each FMessage Text( 10 , m\zeilenpos,message_counter+"."+m\txt) Next End Function Ich habe versucht den Server sich selbst als Client zu adden, sodass der Server alles macht und die Daten alle an die Clients sendet! Jedenfalls, wenn ich versuche ein Server[+Client] zu starten und dann noch ein Client joinen lasse, dann kann das Programm den Stream nicht erstellen, was ich leider gottes nicht verstehe warum. Außerdem ist es eigenartiger weiße möglich als Client sich selber zu bestätigen, obwohl ich es so programmiert habe, das jeder client erstmal eine Anfrage an den Server sendet und der Server sendet darauf hin eine Nachricht, die den Client bestätigt oder nicht. mfg Shark |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group