Vollständige Version anzeigen : Telnet Server with JSON


Flu
19.09.2013, 21:34

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

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
MasterJulian
19.09.2013, 21:41

Schonmal im gamedev forum geschaut? Multiplayer and Network Programming - GameDev~net (;;;gamedev~net/forum/15-multiplayer-and-network-programming/)
Dort findest du bestimmt einiges an Beispielen und Techniken


Flu
20.09.2013, 10:25

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


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:


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


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


Murdoc
20.09.2013, 10:58

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?!


Flu
20.09.2013, 11:16

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.


Murdoc
20.09.2013, 13:06

Ein binäres Protokoll in der Art:

int = 4 bytes signed integer

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


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);


Ähnliche Themen zu Telnet Server with JSON
  • [JavaScript] ajax - json???
    Hallo leue, hab mal ne frage bezüglich json(ajax). Gnauer gesagt, will wissen wie eigentlich die php aussehen soll wenn man einen request mit json macht. ihc habe folgendes jQuery Scipt $;ajax( , error: function(xhr,status) }); die "datei;php" sieht wie folgt aus: $Mail = my [...]

  • [PHP] JSON verarbeiten
    Hallo, ich würde gerne ein paar JSON-Daten verarbeiten. Diese sehen wie folgt aus: Und das halt 10x mal, mit abweichendem Standort. Daraus würde ich mich gerne eine Art "Statusseite" basteln. Sprich falls status "ok" ist, dann soll der Text "ok" grün sein, falls "down" -> Tex [...]

  • [Hilfe] FTP-Server und Telnet - volle Rechte!
    Hoffe mir kann jemand helfen.;) Habe einen FTP-Server gefunden der komplett offen zu sein scheint. Ich habe administrative Rechte, wenn ich per FTP-Client connecte und auch per Telnet; Möchte nun auf diesem Server einen anderen FTP-Server zusätzlich installieren, ohne dass es der Root beme [...]



raid-rush.ws | Imprint & Contact pr