我正在尝试创建一个客户端服务器程序,我从客户端发送一个对象,并在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循环中与服务器建立的客户端套接字发送流,并在服务器接受的同一套接字连接上接收它,它似乎在本地主机上正常工作。
感谢您的帮助
答案 0 :(得分:0)
您为每个对象创建一个新流。仅创建一个输出和一个输入流。对象流发送标头数据,当您创建新流时,该数据可能已损坏。