日期:2014-05-20  浏览次数:20716 次

正在写类似QQ的工具,出了点问题,请教大虾们
这个问题主要是关于Socket的流
ObjectOutputStream
和ObjectInputStream
我写些主要的步骤:

1)服务器:
ListenThread.serversocket=new   ServerSocket(Config.port);
Socket   clientsocket=serversocket.accept();
(new   MainThread(clientsocket)).start();

2)客户端
socket   =   new   Socket(ip,port);         //连接
this.in   =   socket.getInputStream();
this.din   =   new   DataInputStream(in);
this.objectInStream=new   ObjectInputStream(in);
this.out=socket.getOutputStream();
this.dout=new   DataOutputStream(out);
this.objectStream=new   ObjectOutputStream(out);

//登陆
dout.writeUTF(Constant.CMD_LOGIN);
dout.writeInt(id);
dout.writeUTF(password);
dout.writeInt(stat);

int   msg   =   din.readInt();     //等待读取登陆结果


Socket连接正常

但是客户端等待读取这里很奇怪....
如果把客户端那句this.objectStream=new   ObjectOutputStream(out);删除了
就一点问题都没有。但是如果加上了,就在读这里阻塞了。。。
可以保证服务器一点问题都没有,也可以保证收发次序一样....
因为如果删除
this.objectStream=new   ObjectOutputStream(out);   其他的聊天什么的都可以..


我就是不明白这句话为什么会有这么大的作用??
即使根本没有调用过this.objectStream


请教大家


------解决方案--------------------
高手,学习~~~~~
------解决方案--------------------
ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过使用流中的文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
writeObject 方法用于将对象写入流中。所有对象(包括 String 和数组)都可以通过 writeObject 写入。可将多个对象或基元写入流中。必须使用与写入对象时相同的类型和顺序从相应 ObjectInputstream 中读回对象。
------解决方案--------------------
高手啊,学习ing~~~~~
------解决方案--------------------
是不是图片太大了,超过了缓冲区的范围??
TCP数据包的最大数据量也就是65536字节,大约64KB,如果一次传输的数据过大,很可能就接受不到了,最好还是分块传送。
------解决方案--------------------
最近貌似有很多人做类似QQ的东东:)
up