没有从流中接收最终数据

时间:2012-03-21 19:03:21

标签: java sockets network-programming

我目前没有收到对象流中的最后一个对象,直到从服务器发送另一组数据。发送的对象具有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();
    }


}

2 个答案:

答案 0 :(得分:2)

您需要清空header

  

调用者可能希望立即刷新流以确保这一点   用于接收ObjectInputStreams的构造函数不会阻塞   阅读标题

oops = new ObjectOutputStream(os);
oops.flush();

答案 1 :(得分:0)

我没有仔细阅读过代码,但我遇到了Python的这个问题。我注意到,在我的程序再次ping通服务器之前,我的很多服务器命令都没有执行。我的解决方案是确保每个命令结束时都有一个换行符,或者你可以刷新缓冲区。