在Socket通信中采用对象流进行数据传输,产生的问题,请大家帮忙看看~

Koma 发布于 2014/07/16 12:16
阅读 507
收藏 0


由于我希望把整个代码以及我写这段代码和测试这段代码的都能够告诉大家,这样方便大家帮我调试,所以我发表成了博客,请大家点进去帮我看看产生问题的原因是什么吧,O(∩_∩)O谢谢各位 

http://my.oschina.net/u/1156660/blog/291423

加载中
0
狮子的魂
狮子的魂
啊,这个问题的重点不是说上面的方式不行,而是应该每次读取数据的时候都要重新创建一个ObjectInputStream,也就是如下:

  ois = new ObjectInputStream(this.s.getInputStream());
  Message message = null;
  while ( (message = (Message)ois.readObject()) != null ) 
  {
    System.out.println( "===>"+message.getUsername()+" Say:"+message.getMsgcontent() );
    ois = new ObjectInputStream(this.s.getInputStream());

  }

原因是:ObjectInputStream和ObjectOutputStream之间有一个StreamHeader的交流协议,读取会检测StreamHeader的正确性,而这个StreamHeader是在ObjectInputStream对象创建的时候就readStreamHeader();了,也就是不能重用这个对象的。readStreamHeader被设计protected是肯定有着复杂的协议关系,记住不要在同一个流中重用ObjectInputStream对象就ok了

返回顶部
顶部