其实你这并不是问题,只是你疑惑而已,当你清楚Socket的工作原理后,你就不会疑惑了。
Socket里的inputStream和outputStream是负责Socket的输入和输出,并且他们都是阻塞的,除非关闭Socket或者shutdown对应的Stream。
为什么你sleep几秒后数据就全了呢?因为数据在Socket上是边传边收,而不是传完了再收,这是你理解的一个误区,所以我建议你们在传输数据的时候,能在头几位(这里是指byte)指明后面要接受的数据的长度,用read(buf,offset,len)方法肯定可以完整得到你想要的数据,不需要sleep(如果数据够大的话,sleep也是解决不了问题的)。或者你可以用一组约定字符表示结束,一直读到约定字符为止。
Socket里的inputStream和outputStream是负责Socket的输入和输出,并且他们都是阻塞的,除非关闭Socket或者shutdown对应的Stream。
为什么你sleep几秒后数据就全了呢?因为数据在Socket上是边传边收,而不是传完了再收,这是你理解的一个误区,所以我建议你们在传输数据的时候,能在头几位(这里是指byte)指明后面要接受的数据的长度,用read(buf,offset,len)方法肯定可以完整得到你想要的数据,不需要sleep(如果数据够大的话,sleep也是解决不了问题的)。或者你可以用一组约定字符表示结束,一直读到约定字符为止。
解决方案 »
- 奇怪的JSP页面编码方式
- 高分,求webtest资料!
- 我们要为自己的大学做一个二手书交易网站,用jsp技术的话需要学习struts,hibernate,spring这些东西吗?
- jdbc连接oracle问题
- 我的servlet找不到了!The requested resource is not available 请大大们帮忙!
- 页面中选择多项进行删除失败问题!SOS
- 找工作作品问题,请过来人帮忙,谢谢,,100分!
- tomcat+struts中文问题怎么解决?
- 关于 在网页里上传附件的问题!
- jsp无法正常显示页面
- 火速来人啊!急!!新手,tomcat移植weblogic, 报404错误。
- 高手给改改错,谢谢! 文件上传远程服务器。
所以,如果你用普通SOCKET读数据,如果所续数据未收到,肯定会阻塞。
——绝对不会,但是可能会收到 3 组报文: aa ab bb如果用长度来控制读取的长度,是不是要发送2次
——这是比较靠谱的做法