一个完整的读Socket中字节的方法
2008-02-23 10:06:44来源:互联网 阅读 ()
如果在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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash