一个完整的读Socket中字节的方法
2005-03-08 23:45
176 查看
如果在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;
}
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;
}
相关文章推荐
- 一个字节转换成二进制的方法
- socket输入流中读取一个固定长度的字节
- read()方法读取的是一个字节,为什么返回是int,而不是byte
- 一个完整的socket.io通信群聊和单聊的例子
- 【如何快速的开发一个完整的iOS直播app】(搭建Socket即时通讯服务器)
- 一个完整的稳定的,单线程的,有正确的收发功能的使用epoll的socket服务程序
- 基于ES6测试一个字符由两个字节还是由四个字节组成的最简单方法
- 关于Java代码中一个方法代码超出65535字节详解
- Android 一个TextView中设置文字不同字体大小和颜色的最完整方法
- delphi 获取一个字符占用几个字节,方法
- socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)
- 判断一个字符是否为汉字的最佳方法 字数,字符,字节统计
- 一个完整的Socket例子
- 一个完整的MSI包的配置文件XML的内容形式和查看方法ORCA
- 编写一个截取字符串的方法,输入字符串和字节数,输出按字节数截取字符串。如“我008”,3。应该输出我0
- php中按字节截取字符串方法,(汉字占两个字节,字母占一个字节,页面编码必须为utf-8)
- python实现对一个完整url进行分割的方法
- C# UDP Socket 远程主机强行关闭了一个连接的处理方法
- "Unicode"编码,java实现一个按字节截取字符串的子串的方法
- C# 设置和获取一个字节的某一位的值的方法