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

Socket接收数据问题
Socket接收服务端发送过来的数据,如何知道是否接收完全

1:发送端
File file = new File(path);
BfferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] buf = new byte[100 * 1024];
int len = bis.read(buf);
bos.write(buf, 0, len);
bos.flush();

2:接收端
ByteArrayBuffer byteBuffer = new ByteArrayBuffer(0);
while((len = bis.read(buffer)) != -1) {
byteBuffer.append(buffer, 0, len);
}
程序会停在while()循环上,请问这样的问题怎么解决啊
java socket

------解决方案--------------------
发个数据包长度过去呗
------解决方案--------------------
应该是发送端没关闭io
所以接收端不知道.服务端有没有发完.

------解决方案--------------------
socket一定要基于协议!
------解决方案--------------------
服务端的serverSocket一般是一直接受状态的,就像我们访问服务器一样,一天24小时能连上
------解决方案--------------------
引用:
socket一定要基于协议!

====================================
回答正确,如果只是熟悉Socket怎么用,懂一下原理想怎么弄就怎么弄,如果你要用于项目开发中,就不是这么容易处理了,协议定义是否合理,关系到性能和稳定性。
学习Socket还是懂一些网络技术原理吧,网络基础课程中有很多组包方案。
很多人提问Socket的,我一般会推荐去看apache mina开源框架。
------解决方案--------------------
你试试把那个循环给去掉 直接读一行,数据没超过一定的量读一行就能把所有的数据都读出来的。