关于socket通信时传输对象
2013-04-07 20:53
260 查看
利用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,折腾我两小时啊,求大神指教下为什么???
在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,折腾我两小时啊,求大神指教下为什么???
相关文章推荐
- 使用Socket模拟简单的C/S通信,客户端之间数据传输采用对象流
- [经验总结]--关于socket通信传输非char型数组的解决方法
- 关于如何在同一台电脑上的两个安卓模拟器之间的socket通信(图片传输)
- 关于socket使用Amf直接进行对象传输的
- 关于Socket传输对象
- 关于Socket传输流的序列化与反序列化
- 关于socket通信的一个例子!
- 关于android Socket通信中线程阻塞的问题解决(有点乱,随感,有兴趣的可以看看)
- 进程/线程同步互斥与通信及socket传输
- 关于socket通信使用Protobuf
- 关于bundle传输对象,以及 Serializable的理解(暂时的理解)
- 关于socket通信的理解,socket连接通过IP+端口号的方式,那么如果两个服务器端的应用在同一台机器上,并且位于同一个tomcat容器下,那么岂不是两个服务器都收到了客户端发送的信息
- 关于安卓手机做客户端pc做服务器进行Socket通信出现问题的解决案方
- C# socket传输自定义对象
- JAVA Socket传输数据和对象
- socket使用代理连接以及传输对象
- Python网络通信之socket模块(一)关于套接字
- 通信之多客户端传输对象实现
- 关于Flex\AS3 Socket 通信 安全沙箱的问题
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序