UDP-Frage!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Tankbuster

Betreff: UDP-Frage!

BeitragMi, Dez 13, 2006 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Crying or Very sad
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

BeitragMi, Dez 13, 2006 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 13, 2006 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
UUPs...
Achso. Daran liegts also. VIELEN DANK FÜR DEINE ANTWORT! ^^
Twitter
Download Jewel Snake!
Windows|Android

Tankbuster

BeitragDo, Dez 14, 2006 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 14, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Dez 14, 2006 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 15, 2006 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 15, 2006 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 15, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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* Cool
Twitter
Download Jewel Snake!
Windows|Android
 

JanK

BeitragFr, Dez 15, 2006 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group