Problem mit Client zu Server UDP
Übersicht

![]() |
JamaginBetreff: Problem mit Client zu Server UDP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, es sind schon viele UDP's Fragen hier im Forum, doch ich habe keine Antwort auf mein Problem gefunden. Ist sicher nur ein kleines Problem.
Ich habe mir das UDP Chat von blitzbasic.com runtergeladen und soweit verändert, daß ich nicht chatten kann, sondern das sich 2 Kreise mit der Maus steuern lassen. Wenn ich am Host PC die Maus bewege, wird die Bewegung auch an den Client geschickt, bewege ich die Maus am Client wird diese aber nicht am Host angezeigt. Woran kann das liegen? Ich poste mal den Code, vielleicht hab ich ja nur was übersehen, aber ich schnalls echt nicht! ![]() Code: [AUSKLAPPEN] ; UPD Test Graphics3D 800,600,0,2 SetBuffer BackBuffer() AppTitle("Basic UDP Example") Global Status$ Global PortIn = 25000 Global PortOut = 25001 Global RecMsg$ Global SndMsg$ Global PType% Global Client% Global Server% Global Join_IP$ Global Send_IP% Global Serv_IP% Global Temp% Global x1, y1, x2, y2, x1alt, y1alt Choice$ = Input("Would you like to host a chat server or join one? [h or j]") If Choice = "h" Or Choice = "H" Then Server = CreateUDPStream(PortIn) ;Server listens on 25000 If Server <> 0 Then Status = "Server started..." Else Status = "Error starting server." EndIf PType = 1 ;Is Player a host? Else Join_IP$ = Input("Enter the ip address of host: [192.168.0.1]") If Len(Join_IP) = 0 Then Join_IP = "192.168.0.1" Serv_IP = IntegerIP(Join_IP) ;need to change entered ip address to ip format so blitz can read Client = CreateUDPStream(PortIn) ;Client Listens on 25000 If Client <> 0 Then Status = "Client connected to "+Serv_IP Else Status = "Error starting client." EndIf PType = 2 ;Is Player a Client? EndIf Repeat Cls Check_Keys() If PType = 1 Then Temp% = RecvUDPMsg(Server) If PType = 2 Then Temp% = RecvUDPMsg(Client) If Temp <> 0 Then DebugLog Temp If Temp <> 0 Then If PType = 1 Send_IP = UDPMsgIP(Server) ;Get IP Address of Message Sender x1 = ReadShort (Server) y1 = ReadShort (Server) Else Send_IP = UDPMsgIP(Client) ;Get IP Address of Message Sender x2 = ReadShort (Client) y2 = ReadShort (Client) EndIf EndIf ; Remote Kreis If PType = 1 Color 255, 0, 0 Else Color 0, 255, 255 EndIf Oval x2, y2, 30, 30, 1 ; lokaler Kreis x1 = MouseX() y1 = MouseY() If PType = 1 Color 0, 255, 0 Else Color 255, 0, 255 EndIf Oval x1, y1, 30, 30, 1 Text 10,20,"Status: "+Status Text 10, 400, "Server "+"X1= "+X1+" Y1= "+Y1 Text 10, 420, "Client "+"X2= "+X2+" Y2= "+Y2 Flip Until KeyHit(1) End Function Check_Keys() ; mauszeiger und objekte If PType = 1 And Send_IP <> 0 ;Player is a host, send message to client WriteShort (Server, x1) WriteShort (Server, y1) SendUDPMsg(Server, Send_IP, PortIn) EndIf If PType = 2 And Serv_IP <> 0 ;Player is a client, send message to server WriteShort (Client, x1) WriteShort (Client, y1) SendUDPMsg(Client, Serv_IP, PortIn) EndIf End Function Function IntegerIP(IP$) ;From Blitzbasic Forums 'Chroma' ;IP address must be converted to an integer off1=Instr(ip$,".") :ip1=Left$(ip$,off1-1) off2=Instr(ip$,".",off1+1):ip2=Mid$(ip$,off1+1,off2-off1-1) off3=Instr(ip$,".",off2+1):ip3=Mid$(ip$,off2+1,off3-off2-1) off4=Instr(ip$," ",off3+1):ip4=Mid$(ip$,off3+1,off4-off3-1) Return ip1 Shl 24 + ip2 Shl 16 + ip3 Shl 8 + ip4 End Function Würde mich echt freuen, wenn wer den Fehler findet? Danke Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
Meik |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mir deinen Code jetzt nicht genau angeschaut. Aber geb mal, wenn du als Client startest, nicht 192.168.0.1 ein sondern 127.0.0.1. Hab's nicht getestet aber vielleicht hilfts ![]() Edit: Ok getestet, bringt nichts ^^. Wenn ich heute noch genug Zeit finde schau ich es mir. |
||
![]() |
JamaginBetreff: UDP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Meik,
an der Adresse liegt es nicht, weil diese ist im Beispiel drin. Da muß man seine eigene IP eingeben, wenn man 2 PC hat immer die vom HOST. Kann man mit ipconfig unter der konsole rausfinden! (Ausführen --> CMD -->ipconfig) Es geht mir nur darum, wenn ich als Client die Maus bewege, sollte die Bewegung auch am Server sichtbar sein, weil die Variablen ja die gleichen sind! (x2, y2) Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne viel von UDP zu verstehen, aber die BB-Hilfe angeschaut zu haben:
Zum senden und empfangen benötigst du 2 verschiedene Ports. Nur der eine Port in deinem Code tut's wahrwscheinlich nicht. Das geht bei TCP, aber anscheinend bei UDP nicht. Code: [AUSKLAPPEN] udp_read=CREATEUDPSTREAM(In_Port)
udp_write=CREATEUDPSTREAM(Out_Port) Ist bei dir so nicht der Fall. Du benutzt 2 mal die Variable "PortIn" für beide UDPs |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
:O *einschreit* um Himmelswillen, nein! *haarerauf*
Zwei Streams zu benutzen ist - ich sag's jetzt einfach mal so - Schwachsinn, weil dann beide Seiten, also Server und Client, an der Firewall und Router Ports freischalten müssen. Dein Problem ist ganz einfach (verzwickte Sache): Du versuchst beide Programme (Server und Client) auf Port 25000 horchen zu lassen. Aber das geht gar nicht (eigentlich solltest du gar nicht in der Lage sein, beide gleichzeitig ausführen zu können), weil jeder Port immer nur von einem Stream (und folglich auch nur von einem Programm) belegt sein kann. Am einfachsten ist es, wenn nur der Server einen fixen Port hat (eben zB 25000) und der Client einen beliebigen Port selber wählen kann. Der Client schickt dann die erste Nachricht an den Server und dieser ermittelt einfach mit UdpMsgPort ![]() mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jopp, einfach aus
Code: [AUSKLAPPEN] Client = CreateUDPStream(PortIn) ;Client Listens on 25000
das hier machen Code: [AUSKLAPPEN] Client = CreateUDPStream() ;Client port specified by system
|
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit den 2 Streams wurde einst von Rob in seinem Tut geschrieben und ohne große Erklärung von allen ange- und übernommen.
Das einzige was passieren kann ist dass man zur gleichen Zeit Sachen schreibt und liest und das geht laut Rob nicht. Macht man aber normalerweise nie. Wenn man immer erst nach seiner RecvNetMsg Schleife Sendet ist eh nix mehr im stream, was irgendwie irgendwo weggeschickt werden könnte. |
||
![]() |
JamaginBetreff: Problem mit Client zu Server UDP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dieser Thread kann geschlossen werden! Mit Portweiterleitung funktioniert es einwandfrei!
Danke für Eure zahlreichen Tips! lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group