Я программирую игру, которая отправляет позицию игрока на сервер при каждом перемещении игрока, используя XML следующим образом:
<?xml version="1.0" encoding="utf-8" ?> <request type="movement"> <character map="1" coords="10,20"/> </request>
Дело в том, что, поскольку информация отправляется очень быстро, она обычно отправляет два или три раза XML в одном и том же пакете, а затем сервер не может правильно ее проанализировать.
На стороне клиента, используя C # .net, я создаю новый Task
, чтобы отправить информацию, чтобы она продолжала корректно обновлять игру, в задаче, которую я просто вызываю Socket.send
, чтобы отправить XML в виде текста строка.
Клиент:
Byte[] bytesToSend = Encoding.ASCII.GetBytes(texto);
socket.Send(bytesToSend, bytesToSend.length, 0);
Java-сервер:
public String convertStreamToString(InputStream is) throws Exception {
BufferedInputStream reader = new BufferedInputStream(is);
byte[] ent = null;
int recivido;
// String line = reader.readLine();
do {
ent = new byte[reader.available()];
recivido = reader.read(ent);
} while (recivido == 0);
return new String(ent);
}