我目前没有收到对象流中的最后一个对象,直到从服务器发送另一组数据。发送的对象具有1,2或3 int表示它们是第一个中间包还是最后一个包。我已将这些对象发送到一个数组并在调试器中进行了分析,它显示最后一个数据包在第一个数据包再次发送之前不会通过。
这是服务器代码:
public void telleveryone(Object message){
Iterator it = clientOutputStream.iterator();
while(it.hasNext()){
try{
ObjectOutputStream everyone = (ObjectOutputStream)it.next();
everyone.writeObject(message);
everyone.flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
这是客户端上的接收代码:
public void run() {
try{
sock = new Socket("10.42.34.46", 1337);
InputStream is = sock.getInputStream();
ois = new ObjectInputStream(new BufferedInputStream(is));
OutputStream os = sock.getOutputStream();
oops = new ObjectOutputStream(os);
while(true){
serverDraw = (com.DrawTastic.Drawring) ois.readObject();
test.add(serverDraw);
}
}catch(IOException ex){
ex.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:2)
您需要清空header:
调用者可能希望立即刷新流以确保这一点 用于接收ObjectInputStreams的构造函数不会阻塞 阅读标题
oops = new ObjectOutputStream(os);
oops.flush();
答案 1 :(得分:0)
我没有仔细阅读过代码,但我遇到了Python的这个问题。我注意到,在我的程序再次ping通服务器之前,我的很多服务器命令都没有执行。我的解决方案是确保每个命令结束时都有一个换行符,或者你可以刷新缓冲区。