2

我有一个基于 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。这似乎导致的问题多于解决方案。还有其他想法吗?

4

1 回答 1

2

听起来您正在以多线程方式写入输出流,即您正在写入示例之外的其他地方。

顺便说一句:您是否定期重置()流以防止内存泄漏?

于 2012-08-09T18:33:50.847 回答