Telnet Server with JSON

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flu, 19. September 2013 .

Schlagworte:
  1. 19. September 2013
    Hi, ein paar Kollegen und ich sind grad dabei, ein multiplayerspiel zu erstellen (in C#). Wir wollen das nicht mit dem Unity Masterserver machen und haben uns deshalb einen Telnet Server eingerichtet. das Anmelden eines Gerätes beim Server funktioniert bereits. auch das senden der Positionsdaten. Das Ganze findet mit JSON statt. jedoch haben wir nur ein Problem. wenn wir die Position eines Spielers nun jeden Frame senden, dann kommt das Zielgerät mit dem Updaten nicht mehr nach.

    Rahmenbedingungen:
    Wir erledigen das Senden der Daten vie TCPClient und dann werten wir den Bitstream aus. dieser liegt in JSON Format vor, wird dann Decodiert und die neuen Positionsdaten werden übertragen.

    Kann mir jemand sagen wie man sowas normalerweise löst, inklusive Beispiel oder seite

    Danke schonmal
     
  2. 19. September 2013
    AW: Telnet Server with JSON

    Schonmal im gamedev forum geschaut? Multiplayer and Network Programming - GameDev.net
    Dort findest du bestimmt einiges an Beispielen und Techniken
     
  3. 20. September 2013
    AW: Telnet Server with JSON

    Hier mal ein paar mehr Infos

    Gut das mit dem Übertragen jeden Frames, habe ich mir schon gedacht, deshalb habe ich mal versucht nur jede Sekunde oder alle 2 Sekunden zu übertragen. aber selbst das ist schon zu viel.

    Bei dem Server handelt es sich um einen normalen Server mit dem connection type Telnet statt SSH oder so.

    Hier mal die Methode für das Connecten zum Server

    Code:
    void ConnectToServer(TcpClient client, IPEndPoint serverEndPoint)
    {
     client.Connect(serverEndPoint);
     
     clientStream = client.GetStream();
     
     encoder = new ASCIIEncoding();
     buffer = encoder.GetBytes("Hello Server!");
     
     clientStream.Write(buffer, 0 , buffer.Length);
     clientStream.Flush();
    }
    
    und hier für das Senden und Empfangen der Position:

    Code:
    public void SchickePositionsdaten(float x, float y)
    {
     //{"from":1000,"to":[123,234,345],"message":{"cmd":"posupdate","x":1,"y":2}}
     string jsonString = "";
     
     if(username == "usera")
     jsonString = "{\"to\":2,\"msg\":{\"x\":" + x + "}}";
     
     if(client != null && client.Connected)
     {
     //clientStream = client.GetStream();
     
     //encoder = new ASCIIEncoding();
     buffer = encoder.GetBytes(jsonString);
     
     clientStream.Write(buffer, 0 , buffer.Length);
     clientStream.Flush();
     }
    }
    
    beim Empfangen wird testhalber erstmal nur der x Wert behandelt

    Code:
    public float EmpfangePositionsdaten(string jsonBefehl)
    {
     var N = JSON.Parse(jsonBefehl);
     
     //string fromVal = N["from"].ToString();
     string toVal = N["to"].ToString();
     string x = N["msg"]["x"];
     string y = N["msg"]["y"];
     float r = 0;
     float.TryParse(x, out r);
     return r;
     
    }
    
    hoffe damit kann jemand was mehr anfangen und mir evtl. weiterhelfen
     
  4. 20. September 2013
    AW: Telnet Server with JSON

    1. Was vetsteht du unter "Telnet" Server? Ein normaler TCP-Socket sollte doch reichen.
    2. Warum JSON? Nich falsch verstehen, JSON ist klasse, aber bei Zeitkritischen Dingen wäre ein Binäres Protokoll von Vorteil.
    3. Deine ConnectToServer Funktion sieht so aus als ob du jedes mal eine neue Verbindung aufbaust um deinen `buffer` zu übertragen?!
     
  5. 20. September 2013
    AW: Telnet Server with JSON

    Zum Server an sich kann ich nicht viel sagen, den hat nen Kumpel von mir aufgesetzt.
    Die Connectmethode wird einmalig beim Start des Spiels aufgerufen. danach nicht mehr.
    Bei Unity3d gibt es eine Methode void Start(). die wird zum Programmstart aufgerufen und darin wird auch das ConnectToServer aufgerufen.
    Wie würde so ein Binäres Protokoll aussehen. hättest du da nen Link für mich?

    Der Server ist glaub ich ein normaler TCP server, der als connectiontype Telnet verwendet, aber wie gesagt, da habe ich nicht so die ahnung von.
     
  6. 20. September 2013
    Zuletzt bearbeitet: 20. September 2013
    AW: Telnet Server with JSON

    Ein binäres Protokoll in der Art:

    int = 4 bytes signed integer

    Code:
    int ::= frame (in diesem fall 6 * 4 bytes)
    int ::= player-id (from)
    int ::= player-id (to)
    int ::= pos-x
    int ::= pox-y
    int ::= pox-z
    Code:
    int frame = input.readInteger();
    YXZ buffer = input.readBytes(frame);
    
    int from = buffer.readInteger();
    int to = buffer.readInteger();
    int posX = buffer.readInteger();
    int posY = buffer.readInteger();
    int posZ = buffer.readInteger();
    
    process(from, to, posX, posY, posZ); 
     
    1 Person gefällt das.
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.