正在写类似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