本文共 1058 字,大约阅读时间需要 3 分钟。
利用socket通信传输对象,主要内容膜拜此大神的文章 http://blog.csdn.net/kongxx/article/details/7259827
在socket编程中,客户端和服务器端要发送或者接受的类对象 注意要放在包名一样的包中!!!
如Client要发送User对象,可以创建一个User包,把这个User类放在User包中
而服务器也做同样的事,可以创建一个User包,把这个User类放在User包中!!!!
public class User implements Serializable{ //注意要序列化该类
public String name; public int age; public User(){ name=""; age=0; }1. ObjectInputStream与ObjectOutputStream的顺序问题
在网络通讯中,主机与客户端若使用ObjectInputStream与ObjectOutputStream建立对象通讯,必须注重声明此两个对象的顺序。 如: 主机端先建立ObjectInputStream后建立ObjectOutputStream,则对应地客户端要先建立ObjectOutputStream后建立ObjectInputStream,否则会造成两方互相等待数据而导致死锁。 原因是建立ObjectInputStream对象是需要先接收一定的header数据,接收到这些数据之前会处于阻塞状态。以下为java API文档的说明 Creates an ObjectInputStream that reads from the specified InputStream. A serialization stream header is read from the stream and verified. This constrUCtor will block until the corresponding ObjectOutputStream has written and flushed the header.故而为了防止这种死锁状态,通讯两方的ObjectInputStraem,ObjectOutputStream必须注重顺序对应使用。
但是一定要注意,把这个User类放在一个User包里,意思是此实体类必须放在同名的包里,不然就会报出 ClassNotFound错误,OMG,折腾我两小时啊,求大神指教下为什么???