一个完整的读Socket中字节的方法

2008-02-23 10:06:44来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

如果在socket中有下面这种情况发生,就不能使用,一般的方法读取socket中的字节

Socket socket=new Socket(ip,port);
socket.setSendBufferSize(1);

socket.getOutputStream().write("nihaoddddddddddddddd".getBytes());
socket.getOutputStream().flush();

socket.getOutputStream().write("dajiahao".getBytes());
socket.getOutputStream().flush();
socket.getOutputStream().write("222".getBytes());
socket.getOutputStream().flush();

socket.getOutputStream().close();

可以使用下面的方法读取

public static byte[] readSocket(Socket socket) throws Exception{
ArrayList l=new ArrayList();

InputStream out=socket.getInputStream();
int totallen=0;
int count;
/**
* 如果socket对方已经将socket关闭,再次读socket里面的内容放回count为负数;

* 读socket超时,反回已经读的字节
*/
for(;;){
byte[] tmp=new byte[3000];
try{
//System.err.println(out.available());

count=out.read(tmp);
System.err.println("count" count);
}catch(Throwable e){
e.printStackTrace();
System.err.println("ddddddddddddd");
break;
}
System.err.println("count" count);
if(count<=0){
break;
}
totallen =count;
byte[] tmp2=new byte[count] ;

System.arraycopy(tmp,0,tmp2,0,count);
l.add(tmp2);
}
byte[] bs=new byte[totallen];
int pos=0;
for(int i=0;i<l.size();i ){
byte[] tmp=(byte[])l.get(i);

System.arraycopy(tmp,0,bs,pos,tmp.length);
pos =tmp.length;
}
return bs;
}

上一篇: 关于java异常处理机制的深入理解
下一篇: 使用JavaExcel API 往excel中插入图片

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JAVA相关基础知识(4)

下一篇:JAVA中判断某详细信息列表中是否有空项(经验总结)