Mehrere Daten über einen Port

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

ZAiMoN

Betreff: Mehrere Daten über einen Port

BeitragDo, Feb 05, 2004 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe keine Ahnung wie man aus einem Port mehr informationen bekommt.

z.b
x position des Chars
y position des Chars
frame des Chars


....



Wenn ich für jede information 1 port verwende habe ich für 2 spieler 6 ports das ist eigentlich zuviel weil dann noch 2 ports fürs chatten gebaucht werden.

Mein spiel soll dann ein 8 player game werden. Das wird ziehmlich ruckeln.

Wie bekommt man mehrere infos aus einem Port? bzw wie sendet man mehre Infos in durch einem Port also nur 1 Stream.
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill

Jolinah

BeitragDo, Feb 05, 2004 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles nur durch 1 Port machen:

Client:
Code: [AUSKLAPPEN]

Const CLIENT_CONNECTED = 1
Const CLIENT_DISCONNECTED = 2
Const CLIENT_CHAT = 3

server_ip = 389183  ;Nur beispiel, es gibt eine Funktion die die IP in ein Int umwandelt

server_port = 8000

stream = CreateUDPStream()

WriteByte stream, CLIENT_CONNECTED
WriteString stream, client_name$
SendUDPMsg stream, server_ip, server_port

WriteByte stream, CLIENT_CHAT
WriteString stream, client_name$
WriteString stream, chat_text$
SendUDPMsg stream, server_ip, server_port

WriteByte stream, CLIENT_DISCONNECTED
WriteString stream, client_name$
SendUDPMsg stream, server_ip, server_port

CloseUDPStream(stream)


Das heisst du versendest zuerst immer ein Byte. Dieses Byte identifiziert die Information. Am besten du speicherst es in Konstanten damit du dir nicht so viele Nummern merken musst.

Nach dem Byte den Inhalt der Information. String, Float oder was auch immer. Natürlich kann man soviele sachen senden nach dem Byte wie man will.

Server:
Code: [AUSKLAPPEN]

Const CLIENT_CONNECTED = 1
Const CLIENT_DISCONNECTED = 2
Const CLIENT_CHAT = 3

Type client
Field name$
Field ip
Field port
End Type

stream = CreateUDPStream(8000)


Repeat

  If RecvUDPMsg(stream) <> 0
    player_ip = UDPMsgIP(stream)
    player_port = UDPMsgPort(stream)
   
    message_id = ReadByte(stream)   ;Welche Information werden wir bekommen?

    Select message_id
      Case CLIENT_CONNECTED
        name$ = ReadString(stream)
        c.client = new client
        c\name$ = name$
        c\ip = player_ip
        c\port = player_port
        ;... was gemacht werden muss wenn sich ein client verbindet
      Case CLIENT_DISCONNECTED
        name$ = ReadString(stream)

        For c.client = each client
          If c\name$ = name$ then delete c
        Next
        ;... was gemacht wird wenn client getrennt.
      Case CLIENT_CHAT
        name$ = ReadString(stream)
        text$ = ReadString(stream)

        ;An alle anderen clients senden, nur nicht wieder an sich selbst.
        For c.client = each client
          If not c\name$ = name$
            WriteByte stream, CLIENT_CHAT
            WriteString stream, name$
            WriteString stream, text$
            SendUDPMsg stream, c\ip, c\port
          Endif
        Next
    End Select

  Endif

Until Keyhit(1)


Der Server liest dann als erstes dieses Byte und erkennt daran was er machen muss.

So ungefähr. Natürlich muss der Client dann auch wieder gewisse dinge senden. Das hab ich aber jetzt mal weggelassen.

Beim Client sollte dann auch wieder eine Select Case struktur vorhanden sein die die ID's prüft die der Server sendet und entsprechend darauf reagiert.

Hoffe es hilft dir weiter.
 

ZAiMoN

BeitragDo, Feb 05, 2004 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm kenne mich mit types nicht aus rest ist klar danke
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill

Jolinah

BeitragFr, Feb 06, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Types zeigen hier eigentlich auch nicht den UDP Aufbau Wink

Aber ist ganz simpel, wenn der Server die Message CLIENT_CONNECTED erhält macht er einen neuen Player und speichert Name, IP und Port.

Bei CLIENT_DISCONNECTED löscht er diesen player wieder.

Bei CLIENT_CHAT geht er alle player durch (ausser den player der die message geschickt hat) und sendet an deren IP und Port der name des spieler der was im chat gesagt hat und den text.
 

ZAiMoN

BeitragFr, Feb 06, 2004 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
k danke nun hab ich es Smile
In Online Games Gilt:

Luck Beats Skill
Lag Beats Skill
Cheat Beats Skill

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group