socket中客户端readObject 得到的对象不是服务端发送的是什么情况?

小凡没有笑 小凡没有笑 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
情景:
现有一个服务端,发送一个商品列表给客户端,客户端在接收到列表后发送修改数量请求,服务端收到修改请求后,修改相应商品的数量,并再次发送修改后的商品列表给客户端。此时问题出现了!

服务端的输出内容为:


而客户端的输出内容为:


以下贴出服务端和客户端的代码(为了方便大家浏览,只贴了重要部分,详细内容可下载之后的附件):
服务端:
		ServerSocket ss = new ServerSocket(10000);
Socket socket = ss.accept();
//输出和输入流
ObjectOutputStream oos = new ObjectOutputStream(
socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

//商品的集合
List<Goods> goods = new ArrayList<Goods>();
//添加一个商品
goods.add(new Goods(1, "北方", 10));

//new 一个数据传输类
Datas data = new Datas();
//将商品列表放进传输类当中
data.obj = goods;
//在服务端打印商品列表
pirntList(goods);
//将数据传输类发送给客户端
oos.writeObject(data);

//发送完成后修改服务端的商品列表中的商品数量
System.out.println("发送给客户端后修改数量");
goods.get(0).count = 20;

//重新发送
data.obj = goods;
//再次打印
pirntList(goods);

//再次发送给客户端
oos.writeObject(data);

//等待客户端
Thread.sleep(10000000);

客户端:
		Socket socket = new Socket("localhost", 10000);

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(
socket.getOutputStream());

//用来接收商品的列表
List<Goods> goods = null;

//读取服务端发送过来的Datas
Datas data = (Datas) ois.readObject();
//将Datas中的obj转换成商品列表
goods = (List<Goods>) data.obj;
System.out.println("第一次的列表:");
//打印
pirntList(goods);

//再次读取服务端发送过来的Datas
data = (Datas) ois.readObject();
//这次是服务端修改后的商品列表
goods = (List<Goods>) data.obj;
System.out.println("第二次的列表:");
pirntList(goods);

Datas:
public class Datas implements Serializable{
public Object obj = null;
}

为了方便同学们测试,附上原版代码:
http://pan.baidu.com/s/1pJwra7x
...全文
评论 3
收藏 已收藏
分享
返回顶部
小凡没有笑
Java SE 62,621 成员 307,251 内容