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

socket 传输 大数据包
请大家帮忙分析一下Socket 传输 大数据包的 问题…. 

Socket Client 发送方法byte[] b ;DataOutputStream.write(b)
Socket server 接收方法:DataInputStream. read(buf[], socketBufferSize*iLoop, readSize) 
Socket 接收,先读取包头,包头里填有数据包长度,bodylength 
如果bodylength > socketBufferSize 则分多次读取。

我现在接收端的代码为
  public void run(){
try{
while(s.isConnected()){
is = s.getInputStream();
while(is.available()!=0){
System.out.println("InputStream流中的数据个数"+is.available());
b = new byte[is.available()];
is.read(b);//写入b时已经是十进制数据了  
}}}catch (Exception e){
try {
is.close();
s.close();
} catch (Exception e1) {
}}
}
请问我该如何修改

------解决方案--------------------
System.out.println("InputStream流中的数据个数"+is.available());
b = new byte[is.available()];
is.read(b);//写入b时已经是十进制数据了

这个地方不能这么搞,is.available()返回的数是不准确的;开辟固定空间,不停的读就行了。
------解决方案--------------------
用字节来传输:
包头+包体长度+包体内容
------解决方案--------------------
做个缓冲区,缓冲够一个包后直接读取