日期:2014-05-17  浏览次数:20781 次

服务端可以接受到2个对象,但第二个对象和第一个是一样的,是怎么回事啊
为什么我传输对象时,客户端发送2个不同的对象,
服务端可以接受到2个对象,但第二个对象和第一个是一样的,是怎么回事啊!??! 

public Client()
{   MessageClass messageobject=new MessageClass("login");
    
    messageobject.SetLoginUserInfo("18580409","12345","magicgiant");
    
try
{
client=new Socket("localhost",1234);
System.out.println("已建立连接!");
    ObjectOutputStream out=new ObjectOutputStream(client.getOutputStream());
            out.writeObject(messageobject);
out.flush();
System.out.println(1);

messageobject.inquire=true;
messageobject.SetLoginUserInfo("122131","21312","dfsd");
out.writeObject(messageobject);
out.flush();
System.out.println(2);
}
catch(Exception e)
{
System.out.println(e);
}
}
 //以下是server()
public void run()
{  
  try{
                
            is=new ObjectInputStream(client.getInputStream());
    
         }
       catch (Exception ex)
          {
          System.out.println(ex);
          }
          
  while(true){

try
         {  
             MessageClass messageobject = (MessageClass)is.readObject();//获得消息对象
         //打印出类信息    
      System.out.println(messageobject.GetLoginId()+messageobject.GetLoginPassword());
             
             idSocketItem = new IdSocket(messageobject.GetLoginId(),client,messageobject);
             
             s.idSocketList.addElement(idSocketItem);

}
         catch (Exception ex)
          {
          System.out.println(ex);
          }

}
}

按照道理应该输出:
1858040912345
12213121312
可是为什么输出的是
1858040912345
1858040912345
谢谢!

------解决方案--------------------
1.messageobject在第二次输出的时候重新实例化一下,虽然你的对象里面的值变了,但你两次传输给流的都是同一个变量内存地址,会不会出现缓存问题这不好说的。
2.flush这东西我用的不多不过听人说各个流的用法有点差异性有些流甚至不好用像刚才在网上看到这么句话《.flush(); 方法是将内存中的数据一次性输出~!但你没规定内存中数据达到多少时,调用.flush()方法!所以默认是关闭流时,一次性全输出!即:你读入的数据都放在内存中(当内存放不下时就报异常),