请大家帮忙分析一下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()返回的数是不准确的;开辟固定空间,不停的读就行了。
------解决方案--------------------------------------------------------
用字节来传输:
包头+包体长度+包体内容
------解决方案--------------------------------------------------------
做个缓冲区,缓冲够一个包后直接读取