ノンブロッキング ソケット、nio を使用するサーバーがあります。サーバーは別のスレッドで動作し、ゲームと呼ばれる別のスレッドがあります。ゲーム スレッドはサーバー オブジェクトを保持し、server.sendMessage を使用します。サーバー スレッドはデータを読み取るだけです。while ループで 2 つのパケットに対して sendMessage を 2 回連続して呼び出すと、クライアントで「java.io.StreamCorruptedException: 無効なストリーム ヘッダー: 6B6574B4」エラーが発生します。
サーバーコードの一部:
public void write(SelectionKey channelKey, byte[] buffer) {
    if (buffer != null) {
        int bytesWritten;
        try {
            SocketChannel channel = (SocketChannel) channelKey.channel();
            synchronized (channel) {
                bytesWritten = channel.write(ByteBuffer.wrap(buffer));
            }
            if (bytesWritten == -1) {
                resetKey(channelKey);
                disconnected(channelKey);
            }
        } catch (Exception e) {
            resetKey(channelKey);
            disconnected(channelKey);
        }
    }
}
public void broadcast(byte[] buf, SelectionKey fr) {
    synchronized (clientList) {
        Iterator<SelectionKey> i = clientList.iterator();
        while (i.hasNext()) {
            SelectionKey key = i.next();
            if (fr != key)
                write(key, buf);
        }
    }
}
public synchronized void sendMessage(Packets pk) {
    broadcast(pk.toByteArray(), null);
}