クライアントが多数のデータセットをサーバーに送信しているTCP経由のサーバークライアントセットアップがあります。読み書きは ObjectInput/OutputStream を使用します。通常は問題ないのですが、データフローが重くなると StreamCorruptedException: invalid type code が出てしまいます。無効なコードは毎回異なります。ソケットを 1 回開き、同期メソッドを呼び出して、複数のスレッドからデータを送信します。
クライアント:
socket = new Socket("localhost", sockNum);
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
public synchronized void sendMsg(Message msg){
try{
out.writeObject(security.signObject(msg, privKey));
out.reset();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
サーバ:
ServerSocket server = new ServerSocket(sockNum);
Socket client = server.accept();
ObjectInputStream in = new ObjectInputStream(client.getInputStream());
while(threadActive){
Object line = in.readObject();
handleObject(line);
}
更新: 各送信後に out.reset() を追加しましたが、問題は解決しませんでした。また、ループにスリープ ステートメントを追加して、データ レートを下げました。これによりエラーは解消されますが、実際の解決策ではありません。
編集:最初にこれを尋ねてから少し時間が経ちましたが、再び問題に直面しています。メッセージを送信するたびに、スレッドが「確認」メッセージを待機するようにシステムをセットアップしようとしました。受信プロセスに StreamCorruptedException がある場合、ack ではなく「再送信」が返されます。これは、解決策よりも多くの問題を引き起こしているようです。他のアイデアはありますか?