您的位置:首页 > 其它

关于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,折腾我两小时啊,求大神指教下为什么???
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: