客户端代码经常收不到服务器发来的消息,有的时候可以,有的时候不可以不知道什么原因,收不到的时候dedug到51行的时就自动退出了,看服务器日志已经发送了消息到客户端了,不知道什么原因
解决方案 »
- 一个字符抑或多次进行加密是不是没什么意义。
- java中有全局变量这个概念吗?
- 整合SSH2时,页面的数据和数据库中的数据不同步?怎么回事?
- 能不能像移动更换套餐实现当月修改下月生效
- 如何配置服务器
- java 操作 liunx命令,该如何操作呢?
- java 如何调用Sqlserver存储过程?
- 关于SVN的一个问题,100分(实在不知道放哪个类别了:)
- 关联表的查询问题(使用Hibernate DAO的findByExample()方法)
- 请问那哪有对xml进行操作的api文档下载---在线等
- 关于《李刚J2EE-ssh整合开发》工作流项目导入eclipse的一个问题
- swing的问题 设置特定文本的字体颜色
你使用1024字节的缓冲区,虽然你确定你不会收到超过1024字节的内容,但是这个方法并不是如你所期望地收取完所有数据才结束(如果是那样的话,那客户端只发了1023字节,你猴年马月才能收到第1024个字节?)
因此,你只简单地调用一次这个方法,显然是错误的
这个方法的返回值表示了此次调用返回的字节数,你应该提供一个有效的机制来明确自己需要收取多少数据,然后累加每次收到的字节计数,直到符合你的要求才进行进一步的处理!
所以,至少应该是如下的过程(我随意从项目代码里截取的,看个意思就好): int pos=0,ccnt=0,less=headLength;
byte[] responseHead=new byte[headLength];
while(less>0){
ccnt=is.read(responseHead,pos,less);
if(ccnt>0){
pos+=ccnt;
less-=ccnt;
}else if(ccnt==-1) throw new SocketException();
}
while(i==0){
i=socket.getInputStream().available();
}
byte[] b=new byte[i];