UDP problem!!!!
Übersicht

![]() |
juse4proBetreff: UDP problem!!!! |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi leute!
hab zwei fragen: wieso funtionieren die folgenden Programme nich? -man kann sich einklinken und dies wird auch beim server abgefragt! -aber wenn sich 2 player ein loggen sehen sie sich nicht gegenseitig! wieso ist das udp netzwerk so unglaublich langsam? Client: Code: [AUSKLAPPEN] AppTitle "Nighthawk" Graphics 640,480,16,3 SetBuffer BackBuffer() Global x,y,dir Global frame,FR Global GOl,GOr,GOb,GOf Global main_char=LoadAnimImage("gfx\main_char.bmp",24,32,0,12) MaskImage main_char,255,255,255 Global tileset=LoadAnimImage("gfx\tileset.bmp",32,32,0,1) Global int_player=1 Global Sip$,Iip Global yID,talkID Type Tplayer Field x,y,dir Field name$ Field FR Field ID End Type Global STREAM=CreateUDPStream(12556) p.Tplayer=New Tplayer Locate 15,15 p\name$=Input("Name: ") Sip$=Input("IP des Servers: ") Iip=INT_IP(Sip) SendData(Iip) 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 SendData(ip) WriteInt(STREAM,0) id=ReadInt(STREAM) yID=id For p.Tplayer=Each Tplayer If p\ID=yID WriteString(STREAM,p\name$) WriteInt(STREAM,p\x) WriteInt(STREAM,p\y) WriteInt(STREAM,p\dir) WriteInt(STREAM,p\FR) WriteString(STREAM,p\name$) SendUDPMsg STREAM,ip,12555 p\ID=yID While Not way=1 Text 15,15,"empfange Daten..." If Not RecvUDPMsg(STREAM)=0 If KeyHit(1) Then End MSG$=ReadString(STREAM) If MSG$="con" Then way=1 EndIf Flip Cls Wend EndIf Next End Function Function NewPlayer(Oname$) int_player=int_player+1 p.Tplayer=New Tplayer p\x=0 p\y=0 p\dir=0 p\name$=Oname$ p\FR=0 p\ID=ReadInt(STREAM) End Function Function Your() For p.Tplayer=Each Tplayer If p\ID=yID p\x=x p\y=y p\dir=dir p\FR=FR EndIf Next End Function Function DrawPlayer() GOr=False:GOl=False:GOf=False:GOb=False For z2=0 To 128 For z1=0 To 128 ;DrawBlock tileset,z1*32,z2*32,MAP(z1,z2,0) If ImagesCollide(main_char,x+1,y,1,tileset,32,32,0) Then GOr=True If ImagesCollide(main_char,x-1,y,1,tileset,32,32,0) Then GOl=True If ImagesCollide(main_char,x,y-1,1,tileset,32,32,0) Then GOf=True If ImagesCollide(main_char,x,y+1,1,tileset,32,32,0) Then GOb=True Next Next Color 210,0,0 For p.Tplayer=Each Tplayer DrawImage main_char,p\x,p\y,p\FR+(p\dir*3) Text p\x,p\y-15,p\name$ Next ;DrawImage out_fit,x-scrollX,y-scrollY,FR+(dir*3)+inv*12 walk_modus=False If KeyDown(200) Then y=y-1:walk_modus=True:dir=0 If KeyDown(208) Then y=y+1:walk_modus=True:dir=2 If KeyDown(203) Then x=x-1:walk_modus=True:dir=3 If KeyDown(205) Then x=x+1:walk_modus=True:dir=1 If walk_modus=True Then frame=frame+1:UDP_out() If frame=6 FR=0 ElseIf frame=12 FR=1 ElseIf frame=18 FR=2 ElseIf frame=24 FR=1 ElseIf frame>24 frame=0 EndIf End Function Function Game() While Not KeyHit(1) Text 15,15,"Anzahl der Spieler: "+int_player For p.Tplayer=Each Tplayer If p\ID=yID Text 15,30,"X: "+p\x Text 15,45,"Y: "+p\y EndIf Next DrawPlayer() Your() If Not RecvUDPMsg(STREAM)=0 UDP_in() EndIf Flip Cls Wend End Function Function UDP_out() WriteInt(STREAM,1) For p.Tplayer=Each Tplayer If p\ID=yID WriteInt(STREAM,p\x) WriteInt(STREAM,p\y) WriteInt(STREAM,p\dir) WriteInt(STREAM,p\FR) WriteInt(STREAM,p\ID) SendUDPMsg STREAM,Iip,12555 EndIf Next End Function Function UDP_in() msg_type=ReadInt(STREAM) talkID=ReadInt(STREAM) If msg_type=0 NewPlayer(ReadString(STREAM)) ElseIf msg_type=1 ;ohh... nein, Spieler bewegt sich! :P For p.Tplayer=Each Tplayer If p\ID=talkID p\x=ReadInt(STREAM) p\y=ReadInt(STREAM) p\dir=ReadInt(STREAM) p\FR=ReadInt(STREAM) EndIf Next ;blubba blupp EndIf End Function Game() WriteInt(STREAM,-1) WriteInt(STREAM,yID) SendUDPMsg STREAM,Iip,12555 Server: Code: [AUSKLAPPEN] AppTitle "Nighthawk-Server" Graphics 400,400,2,2 SetBuffer BackBuffer() Print "UDP-Server" Print "beliebige Taste zum fortfahren..." WaitKey() Global int_players Global name$ Type Tplayer Field x,y,dir,FR,ID,name$ Field ip End Type .wrong Print "Zum Server erstellen wird ein" Print "Passwort benötigt..." key$=Input("--> ") If Not key$="define server" Goto wrong EndIf STREAM=CreateUDPStream(12555) While Not KeyHit(1) Flip Cls ip_count=CountHostIPs(GetEnv("localhost")) For i=1 To ip_count Text 5,5,DottedIP(HostIP(1)) Next Text 5,20,"Anzahl der Spieler: "+int_players ;frage Nachrichten ab If Not RecvUDPMsg(STREAM)=0 msg_type=ReadInt(STREAM) If msg_type=0 ;neuer Spieler will beitreten!!!!!!! name$=ReadString(STREAM) Locate 5,60 Print "Spieler: "+name$+" möchte sich einloggen." confirm$=Input("ja / nein ? ") If Not confirm$="ja" Goto go1 EndIf int_players=int_players+1 WriteInt(STREAM,int_players) ip=UDPMsgIP(STREAM) SendUDPMsg STREAM,ip,12556 p.Tplayer=New Tplayer p\x=ReadInt(STREAM) p\y=ReadInt(STREAM) p\dir=ReadInt(STREAM) p\FR=ReadInt(STREAM) p\name$=ReadString(STREAM) p\ip=UDPMsgIP(STREAM) p\ID=int_player WriteString(STREAM,"con") SendUDPMsg STREAM,p\ip,12556 For p.Tplayer=Each Tplayer WriteInt(STREAM,0) WriteString(STREAM,name$) WriteInt(STREAM,int_player) Next .go1 ElseIf msg_type=1 ;Spieler bewegt sich!!!!!!!: wird danach an alle Spieler gesendet! SendToAll(ReadInt(STREAM),ReadInt(STREAM),ReadInt(STREAM),ReadInt(STREAM),ReadInt(STREAM)) ElseIf msg_type=-1 int_player=int_player-1 lol=ReadInt(STREAM) For p.Tplayer=Each Tplayer If p\ID=lol Delete p EndIf Next EndIf EndIf Wend Function SendToAll(x,y,dir,FR,id) For p.Tplayer=Each Tplayer WriteInt(STREAM,1) WriteInt(STREAM,id) WriteInt(STREAM,x) WriteInt(STREAM,y) WriteInt(STREAM,dir) WriteInt(STREAM,FR) SendUDPMsg STREAM,p\ip,12556 Next End Function NEED help! thx im vorraus! mfg: Code: [AUSKLAPPEN] mortus
|
||
Portfolio |LinkedIn |XING |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Falls die Player nicht im gleichen LAN sind, sondern von Aussen über einen Router verbinden wollen, dann hast du das selbe Problem wie bei https://www.blitzforum.de/foru...hp?t=24116 Einen fixen Port beim Client bringt nichts, der Router bei den Clients verändert den Port gegen Aussen, so dass er nicht dem im Code angegebenen Port entspricht. Du musst in diesem Fall mit UDPMsgPort(udp_stream) den Absenderport ermitteln und auch auf diesen Port antworten, genau so wie du es mit der IP gemacht hast (UDPMsgIP), dann müsste es funktionieren ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group