大概情况如下:我建立一服务器端和一个客户端之间的连接.,客户端连接到服务器端后,发
送十个类Tstr的对象实例.Tstr类内容如下:
class Tstr implements Serializable{//被传输的类
 String ID;
}
服务器端侦听9999端口,收到客户端的socket连接后,不断的接收Tstr类的实例,并把它打印
在屏幕.我在客户端发送的十个Tstr的实例都是不一样的.但是在服务器端接收到的Tstr却
都是一样的内容.
服务器端的代码如下:
import java.io.*;
import java.net.*;
/*
 * 服务器端,侦听9999端口,接收Tstr类的对象,并把它打印在屏幕
 */
public class Stemp {
 public static void main(String[] args)
 {
 ServerSocket ser=null;
 Socket so=null;
 ObjectInputStream in=null;
 ObjectOutputStream out=null;
 Tstr mer=null;
 try{//侦听端口9999
  ser=new ServerSocket(9999);
  so=ser.accept();
  out=new ObjectOutputStream(so.getOutputStream());
  in=new ObjectInputStream(so.getInputStream());
 }
 catch(IOException e){}
 
 while(true){//循环接收Tstr类的实例并把它打印在屏幕
  try{
  mer=(Tstr)in.readObject();
  System.out.println(mer.ID);
  }
  catch(IOException ex){}
  catch(ClassNotFoundException ex){}
 }
 }
}
class Tstr implements Serializable{//被传输的类
 String ID;
}------------------------------------------------------------------------------
-
客户端的代码如下:
import java.net.*;
import java.io.*;
import java.io.IOException;
/*
 * 客户端,连接服务器,并发送十个Tstr类的实例
 */public class Temp { /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自动生成方法存根
  Socket socket=null;
  ObjectInputStream in=null;
  ObjectOutputStream out=null;  try{//建立socket连接,连接到服务器
   socket=new Socket("localhost",9999);
   in=new ObjectInputStream(socket.getInputStream());
   out=new ObjectOutputStream(socket.getOutputStream());
   
   }
  catch(IOException e){System.out.println(e);}
  Tstr merinfo=new Tstr();
  for(int i=0;i<10;i++){//向服务器端发送十个Tstr类的实例
   merinfo.ID="ID"+i;
   try{
    System.out.println("ID:"+merinfo.ID);
    out.writeObject(merinfo);
   }
   catch(IOException ex){System.out.println(ex);}
  }
 }}
------------------------------------------------------------------------------
-
然后客户端的输出如下:
ID:ID0
ID:ID1
ID:ID2
ID:ID3
ID:ID4
ID:ID5
ID:ID6
ID:ID7
ID:ID8
ID:ID9
服务器端的输出如下:
ID0
ID0
ID0
ID0
ID0
ID0
ID0
ID0
ID0
ID0我想,服务器端的输出应该是这样子的啊:
ID0
ID1
ID2
ID3
ID4
ID5
ID6
ID7
ID8
ID9
为什么不是这样呢?

解决方案 »

  1.   

    另外,我试过重写Tstr类的hashCode()方法和equals()方法,但是结果还是那样子.
      

  2.   

    你把Tstr 类里面的属性类型改为BufferString 看看
    另外,建议你对类的属性读写的使用使用BEAN,也就是说赋值的时候用set方法
    获取值的时候用get方法
      

  3.   

    http://java.sun.com/developer/technicalArticles/Programming/serialization/有一段:Caching Objects in the Stream
    ....................................大意是说, merinfo写过一次後, 即使它的数据有改变, 被发送的数据还是和第一次发送时候一样的。 所以, 要new一个Tstr类, 或者,  每次out.writeObject(merinfo);後再调用 out.reset();,这样,数据就会重写。
      

  4.   

    //Tstr merinfo=new Tstr();
      for(int i=0;i<10;i++){//向服务器端发送十个Tstr类的实例
       Tstr merinfo=new Tstr();//把对象声明写在这里,既每次都new 一个对象
       merinfo.ID="ID"+i;
       try{
        System.out.println("ID:"+merinfo.ID);
        out.writeObject(merinfo);
       }
       catch(IOException ex){System.out.println(ex);}
      }