自定义的一个类, 从客户端发送到服务器端,服务器接收到的值与发送时的值不一样
不知道为什么?
public class ClientTest {// 客户端

public static void main(String[] args) {

try {
Socket cs = new Socket("127.0.0.1", 8888);
ObjectOutputStream oos = new ObjectOutputStream(cs.getOutputStream());
Req r1 = Req.LOIGN;
r1.setData("123");
oos.writeObject(r1);// 第一次发送
oos.flush();

Req r2 = Req.LOIGN;
r1.setData("456");
oos.writeObject(r2);// 第二次发送
oos.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();

}}class Req  implements Serializable {
        private static final long serialVersionUID = 200805061818L; public static final Req LOIGN = new Req("login");  private String type;
private String data;// 存放数据

private Req(String type) {
this.type = type;
}

public void setData(String data) {
this.data = data;
}

public String getData() {
return data;
}
}public class ServerTest {// 服务器端 public static void main(String[] args) {

try {
ServerSocket ss = new ServerSocket(8888);
Socket cs = ss.accept();
System.out.println(cs.getInetAddress());

ObjectInputStream ios = new ObjectInputStream(cs.getInputStream());
// first
Req r1 = (Req)ios.readObject();//第一次接收 System.out.println("1.server data: " + r1.getData()); 

Req r2 = (Req)ios.readObject();//第二次接收 
System.out.println("2.server data: " + r2.getData());
cs.close();
System.out.println("server end...");
} catch (IOException e) {
e.printStackTrace();

catch (ClassNotFoundException e) {
e.printStackTrace();
}


}
}
服务器端显示的结果:
/127.0.0.1
1.server data: 123
2.server data: 123// 我想的应该是456
server end...

解决方案 »

  1.   


    public class ClientTest
    {// 客户端    public static void main(String[] args)
        {        try
            {
                Socket cs = new Socket("127.0.0.1", 8888);
                ObjectOutputStream oos = new ObjectOutputStream(cs
                    .getOutputStream());
                Req r1 = Req.LOIGN;
                r1.setData("123");
                oos.writeObject(r1);// 第一次发送
                oos.flush();
                
                oos.reset();
                
                Req r2 = Req.LOIGN;
                r2.setData("456");
                oos.writeObject(r2);// 第二次发送
                oos.flush();
            }
            catch (UnknownHostException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
      

  2.   

                Req r2 = Req.LOIGN;
                r1.setData("456");
                oos.writeObject(r2);// 第二次发送
    仔细看看,你的第二行是r1 哦!
      

  3.   

    修改后Req r2 = Req.LOIGN;
    r2.setData("456");// 己修改
    oos.writeObject(r2);
    oos.flush();但结果:
    /127.0.0.1
    1.server data: 123
    2.server data: 123
    server end...
      

  4.   

    你没有把流清空吧,我想应该flush一下
      

  5.   

    有清空啊
        Req r1 = Req.LOIGN;
                r1.setData("123");
                oos.writeObject(r1);// 第一次发送
                oos.flush();
                
                Req r2 = Req.LOIGN;
                r1.setData("456");
                oos.writeObject(r2);// 第二次发送
                oos.flush();
      

  6.   

    简单解决方法,你还是每次都 new 一个新的吧!
      

  7.   

    public static final Req LOIGN = new Req("login");
    这句改为
    public static Req getReq() {
        return new Req("login");
    }调用时
    Req r1 = Req.getReq();Req r2 = Req.getReq();
    试试