UDP Problem
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: UDP Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi, ich habe hier ein udp problem, zuerst habe ich die spielerdaten so gesendet, wenn man sich bewegt hat, aber das ging leider nicht, nun sende ich diese nach einigen millisecs, und es funktioniert immernoch nicht, aber eine UDP verbindung kommt zustande. seht selber, vll weiss ja jemand einen rat.
ich brauche dies für ein weltraumshooter, was im netzwerk funktionieren soll. CLIENT: Code: [AUSKLAPPEN] Graphics 800,600,32,2
n = CountHostIPs("localhost") host_ip = HostIP(1) ipaddress$ = DottedIP$(host_ip) wtimer=CreateTimer(100) UDPTimeouts 9 udp=CreateUDPStream( ) Global name$=Input$("Name:") WriteLine udp,"1|"+name$+"|" WriteInt udp,MilliSecs() SendUDPMsg udp,host_ip,2011 Global PlayerX, PlayerY, sekunde, timer Global player.player Type player Field name$ Field x,y End Type Repeat Cls Color 255,0,0 Rect PlayerX,Playery,16,16 Color 128,0,0 For player.player=Each player Text player\x,player\y,player\name$ Next ip=RecvUDPMsg( udp ) ; If Eof( udp )<0 RuntimeError "RecvUDPMsg failed" If ip ; linin$=ReadLine$( udp ) gesamt_byte_anzahl = ReadAvail(udp) Print gesamt_byte_anzahl Menu=Int(Mid(linin$,1,Instr(linin$,"|",1))) linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1)) If menu=1 Then x=Int(Mid(linin$,1,Instr(linin$,"|",1)-1)) linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1)) y=Int(Mid(linin$,1,Instr(linin$,"|",1)-1)) linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1)) nam$=Mid(linin$,1,Instr(linin$,"|",1)-1) If nam$=name$ Then PlayerX=x PlayerY=y Else ok=0 For player.player=Each player If player\name$=nam$ Then ok=1 player\x=X player\y=y EndIf Next If ok=0 Then player.player=New player player\name=nam$ player\x=X player\y=y EndIf EndIf EndIf EndIf move=0 If KeyDown(203) Then playerx=playerx-10 move=1 EndIf If KeyDown(200) Then playery=playery-10 move=1 EndIf If KeyDown(205) Then playerx=playerx+10 move=1 EndIf If KeyDown(208) Then playery=playery+10 move=1 EndIf If sekunde>1 Then WriteLine udp,"2|"+name$+"|"+playerx+"|"+playerY+"|" SendUDPMsg udp,host_ip,2011 sekunde=0 EndIf If KeyDown (1) Then End Zeit_Update() Forever Function Zeit_Update() If (MilliSecs() - timer) > 300 Then sekunde = sekunde + 1 timer = MilliSecs() EndIf End Function SERVER: Code: [AUSKLAPPEN] AppTitle "Blitz UDP Echo Server"
UDPTimeouts 100 udp=CreateUDPStream( 2011 ) If Not udp RuntimeError "CreateUDPStream failed" Print "Echo Server - "+DottedIP$( UDPStreamIP( udp ) )+":"+UDPStreamPort( udp ) WTimer=CreateTimer(100) Global player.player Type player Field name$ Field x,y Field ip End Type Global timer,sekunde Repeat For player.player=Each player If player\name$="" Then Delete player.player Next ip=RecvUDPMsg( udp ) If Eof( udp )<0 RuntimeError "RecvUDPMsg failed" If ip linin$=ReadLine$( udp ) Menu=Int(Mid(linin$,1,Instr(linin$,"|",1))) linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1)) If menu=1 Then pname$=Mid(linin$,1,Instr(linin$,"|",1)-1) player.player=New player player\name$=pname$ player\x=Rnd(700) player\y=Rnd(500) player\ip=ip For player.player=Each player WriteLine udp,"1|"+player\x+"|"+player\y+"|"+player\name$+"|" SendUDPMsg udp,ip,UDPMsgPort(udp) Next EndIf If menu=2 Then nam$=Mid(linin$,1,Instr(linin$,"|",1)-1) linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1)) x=Int(Mid(linin$,1,Instr(linin$,"|",1)-1)) linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1)) y=Int(Mid(linin$,1,Instr(linin$,"|",1)-1)) bewegung=0 For player.player=Each player If nam$=player\name$ Then player\x=x player\y=y bewegung=1 EndIf Next EndIf If sekunde>1 Then a=0 For player.player=Each player WriteLine udp,"1|"+player\x+"|"+player\y+"|"+player\name$+"|" SendUDPMsg udp,ip,UDPMsgPort(udp) a=a+1 Next sekunde=0 Print "An "+a+" Clients gesendet." EndIf EndIf Delay 0 Zeit_Update() Forever Function Zeit_Update() If (MilliSecs() - timer) > 300 Then sekunde = sekunde + 1 timer = MilliSecs() EndIf End Function ich bedanke mich für eure hilfen. |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde den Fehler zwar nicht, aber wieso liest du die Nachrichten so kompliziert aus?
Du schreibst alles als Line in den Stream, dabei, könntest du doch einfach die Befehle WriteByte, WriteString und WriteByte verwenden. Das erspart dir ne Menge Arbeit ![]() Ausserdem würde ich dir empfehlen, das ganze mit der ENet-Library zu machen, die sich da irgendwo im DLL's und Userlib's Forum befindet. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich denke mal das auslesen der narichten geht so am schnellsten, bin mir aber nicht so sicher, und wie ich es mit write byte machen sollte das weiss ich nicht genau, die lib, ich weiss nicht ob diese so ideal dafür ist. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group