接收ObjectInputStream时出错

时间:2014-07-18 13:20:56

标签: java sockets objectinputstream objectoutputstream

我正在尝试创建一个客户端服务器程序,我从客户端发送一个对象,并在while循环中连续接收服务器上的对象。

客户代码:

ObjectOutputStream oos = null;
while(true){

            WorkerMessageToMaster message = new WorkerMessageToMaster(WorkerTasksStatus.getTaskStatusMap(), WorkerTasksStatus.getTaskStatusReduce());
            oos = new ObjectOutputStream(taskManagerSocket.getOutputStream());
            oos.writeObject(message);
            oos.flush();
            Thread.sleep(1000);
        }

服务器代码:

ObjectInputStream ois = null;
while (true ) {

            ois = new ObjectInputStream(clientSocket.getInputStream());
            WorkerMessageToMaster taskMapObject = (WorkerMessageToMaster)ois.readObject();
            System.out.println("Connection from: "+clientSocket.getInetAddress().getHostAddress().toString());

        }

当我尝试在本地系统上运行此代码时它正常运行,但是当我尝试在不同的机器(不同的Ips)中运行客户端和服务器时,我收到以下错误。

java.io.StreamCorruptedException: invalid stream header: 74000432
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at master.MasterAnalyzer.heartBeat(MasterAnalyzer.java:58)
at master.MasterAnalyzer.run(MasterAnalyzer.java:80)
at java.lang.Thread.run(Thread.java:745)

我对这种不稳定的行为感到困惑,因为我通过在while循环中与服务器建立的客户端套接字发送流,并在服务器接受的同一套接字连接上接收它,它似乎在本地主机上正常工作。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您为每个对象创建一个新流。仅创建一个输出和一个输入流。对象流发送标头数据,当您创建新流时,该数据可能已损坏。