我在TCP上设置了服务器 - 客户端,客户端正在向服务器发送大量数据集。读/写使用ObjectInput / OutputStream。我在正常情况下没有任何问题,但是当数据流变重时,我得到一个StreamCorruptedException:无效的类型代码。无效代码每次都不同。我打开套接字一次并调用synchronized方法从多个线程发送数据。
客户端:
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。这似乎比解决方案引起更多问题。还有其他想法吗?
答案 0 :(得分:2)
听起来您正在以多线程方式写入输出流,即您正在写入除示例之外的其他位置。
BTW:您是否定期重置()流以防止内存泄漏?