こんにちは私は問題にまっすぐにさせてください。私は、クライアントがJavaのtcpソケットが正しく受信されません
を認証された後、サーバーがこのクライアントに送信する大きなJSONパケットを持っている。しかし、それは分割または何かの例だようにパケットが戻って奇妙な方法で来る:
JSONは次のようになります。
それが伝わってくるときReceived: {"UserID":1,"PlayerID":2,"EXP":0,"Lvl":1,"Coins":0,"ItemSlots":30}
:それはクライアントに来るとき
Received: {"UserID":1,"PlayerID":2,"EXP":0,"Lvl":1,"Coins":0,
Received: "ItemSlots":30}
は、なぜそれがパケットか何かを分割しないとどのように私はとにかくこの問題を解決することができますか?
Javaがコードを受信:
private class ClientThread extends Thread {
public void run() {
try {
while (selector.select() > 0) {
for (SelectionKey sk : selector.selectedKeys()) {
selector.selectedKeys().remove(sk);
if (sk.isReadable()) {
SocketChannel sc = (SocketChannel)sk.channel();
ByteBuffer buff = ByteBuffer.allocate(1024);
String content = "";
while (sc.read(buff) > 0) {
sc.read(buff);
buff.flip();
content += charset.decode(buff);
buff.clear();
}
System.out.println("Recieved: " + content);
sk.interestOps(SelectionKey.OP_READ);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
おかげで素晴らしい一日を過ごします。
ByteBufferのサイズを2048に増やしてみてください。 –
私はそれを試してみましたが、大規模なパケットではありませんでした。私は大きなパケットに対して何らかのコードが必要だと思います。 – Premt
試してみてください:ByteBuffer.allocate(2048);あなたのコードで –