我有一个基于 TCP 的服务器-客户端设置,其中客户端向服务器发送了许多数据集。读/写使用 ObjectInput/OutputStream。在正常情况下我没有任何问题,但是当数据流变大时,我得到了 StreamCorruptedException: invalid type code。无效代码每次都不一样。我打开套接字一次并调用同步方法从多个线程发送数据。
客户:
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。这似乎导致的问题多于解决方案。还有其他想法吗?