利用socket通信传输对象,主要内容膜拜此大神的文章 http://blog.youkuaiyun.com/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,折腾我两小时啊,求大神指教下为什么???