UDP-Frage!
Übersicht

![]() |
TankbusterBetreff: UDP-Frage! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mir schon alle möglichen tut's zu diesem Thema durchgelesen, und 2 Stunden das Forum durchsucht, aber Ich hab einfach keine Ahnung wie Ich UDP einsetzen soll!
In folgendem Beispiel habe ich versucht, einen Server zu erstellen, der einen Neuen Spieler erstellen soll(als id wird die ip gespeichert)! Aber bei mir scheint das nicht gut zu klappen, denn wenn ich den server und den client starte, passiert absolut nichts ![]() Ich zerbrech mir jetzt scon sooo lange den Kopf darüber..... kann mir bitte jemand helfen? Server: Zitat: Type player
Field send,recv Field byte Field id End Type sende_stream = CreateUDPStream(8000) empfangs_stream = CreateUDPStream(8001) While Not KeyDown(1) byte=ReadByte(empfangs_stream); hier wird der neue spieler erstellt! If byte=1 Then P.player=New player P\id=RecvUDPMsg(empfangs_stream);ip als id festlegen P\recv=RecvUDPMsg(empfangs_stream) P\byte=ReadByte(empfangs_stream) print "lololol" EndIf For P.player=Each player If P\recv=RecvUDPMsg(empfangs_stream) Then P\byte=ReadByte(empfangs_stream) Print P\byte WriteByte(sende_stream,200);nachricht wird zurückgeschickt SendUDPMsg sende_stream,P\id,8000 Next WaitKey() Flip Wend Client: Zitat: sende_stream = CreateUDPStream(4000) empfangs_stream = CreateUDPStream(4001) WriteByte(sende_stream,1);nachricht wird zurückgeschickt SendUDPMsg sende_stream,meine lokale ip(wie die wohl heißen mag)*lol*^^,4000 WaitKey() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also was mir auffällt: Du erzeugst auf dem Server zwei Streams mit den Ports 8000 und 8001 und auf dem Client mit den Ports 4000 und 4001? Dann connectest Du den Server auf Port 4000 und antwortest dem Client auf Port 8000? Wie soll das funktionieren?
Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
UUPs...
Achso. Daran liegts also. VIELEN DANK FÜR DEINE ANTWORT! ^^ |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch en neues problem!^^
Angenommen, es spielen 4 Spieler auf dem Server, und der client sendet die nachricht, dass die Spielfigur nach vorne läuft! Der Server ließt das, und schickt es an alle anderen clienten. Aber in der nachricht an den client kann ich ja schlecht die nummer des spielers mitschicken (z.b. "player2 move")! Und wenn doch, könnte mir bitte jemand erklären, wie man einstellt, dass der client dann erst die nummer ließt(player2), und dann für diesen player die figur bewegt? bin nämlich absoluter noob mit tcP und UDP^^ |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tankbuster hat Folgendes geschrieben: Aber in der nachricht an den client kann ich ja schlecht die nummer des spielers mitschicken (z.b. "player2 move")! Warum nicht? Wie willst Du sonst unterscheiden, welcher der anderen Spieler bei Dir lokal aktualisiert werden muss? Bastel Dir doch einfach einen Header für jedes Packet zusammen, wo im Header dann eben die Spieler-ID drin steht und im Rest dann die Position. Dann wäre ein Timestamp zusätzlich nicht schlecht, weil es passieren kann, dass UDP-Packete nicht in der Reihenfolge ankommen, in der sie abgeschickt wurden. Damit könntest Du Packete, die ältere Positionsangaben haben, als Du schon bekommen hast, einfach verworfen werden. Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum solltest du das nicht können?
Einfach die Nachricht nach ihrer Ankunft auslesen und entsprechend interpretieren. Du kannst natürlich nicht die originale objektID reinpacken sondern es muss die NetzID dieser Figur sein welche versandt wird. Diese NetzID wird von allen anderen Systemen als deine Figur angesehen und dann entsprechend verändert. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke erstmal =)
Jetzt hab ich ein bisschen ausprobiert, und kann den gesendeten string teilen *freu* Aber hier kommt noch eine Frage zu meinem Server (Das ist der Server, er soll eine empfangene Nachrichten von einem Client an alle anderen Clients schicken) Da ich den Code nicht testen kann, könntet ihr mir sagen, ob er so funktionieren wird?!? Hab mir sogar die Mühe gemacht, alles zu erklären ^^ Zitat: Type player
Field send,recv Field byte$ Field id Field satz$ End Type sende_stream = CreateUDPStream(8000) empfangs_stream = CreateUDPStream(8001) id=1 While Not KeyDown(1) byte$=ReadString(empfangs_stream) If byte$="New" Then ;wenn ein client geöffnet wird, sendet er als erstes diese nachricht P.player=New player P\id=id id=id+1 P\recv=RecvUDPMsg(empfangs_stream) ;ip P\byte$=ReadByte(empfangs_stream) ;die nachricht,die vom client geschickt wird, wird gelesen EndIf For P.player=Each player If P\recv=RecvUDPMsg(empfangs_stream) Then ;wenn eine nachricht empfangen wird,dann... satz$=ReadString(empfangs_stream) Print satz$ ;wird angezeigt If satz$ <>0 Then WriteString(sende_stream,satz$) ;wird an alle anderen (angemeldeten) clienten verschickt SendUDPMsg sende_stream,P\recv,8000 ;an den client gesendet (über port 8000) EndIf Next Flip Wend |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst den Code schon testen, Du musst nur Client und Server auf dem gleichen Rechner starten und dann natürlich 127.0.0.1 als IP verwenden.
Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bber wenn man 127.0.0.1 eingibt, geht das net(wegen den Punkten)^^
Ich hab aber irgendwo noch die Zahl für die lokale ip rumliegen... damit geht das^^ *Ich begebe mich nun auf die Suche* ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
JanK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier hab ich eine Funktion, die ich irgendwo mal gefunden hab. Sie wandelt eine IP in der Form xxx.xxx.xxx.xxx in eine Zahl um:
Code: [AUSKLAPPEN] Function IntegerIP(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 |
||
Ich habe keine Zeit, mich zu beeilen.
The Pollux Conflict || The Pollux Renegades || Lipstick-live.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group