Socket通信接收字节流处理问题

Jia_Li_z 2018-12-26 10:22:27
各位老哥,我弄了个TCP操作的工具,现在我是做的是,客户端给服务端发信息,然后服务端返回给客户端消息,现在测试是发送过去了,也接收到了,但是在while循环中跳不出来了,跪求解答
 /**
* 接收TCP响应
*/
in = socket.getInputStream();
BufferedInputStream reader = new BufferedInputStream(in);
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
byte[] buffer = new byte[512];
int len =0;
System.out.println(reader.read(buffer));
while((len=in.read(buffer)) == -1){
bytesOut.write(buffer, 0, len);
System.out.println(new String(new String(buffer,0,len).getBytes("utf-8"),"GBK"));
System.out.println(bytesOut.toString("gb2312")+len);
}
...全文
456 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jia_Li_z 2018-12-26
  • 打赏
  • 举报
回复
引用 6 楼 LCL_data 的回复:
[quote=引用 5 楼 it-zjl 的回复:] 苦恼啊,昨天是转换不了,今天是接收不到
调试看下,temp里面有值没[/quote]
 while ((bufferedReader.read()) != -1) {
               // info += bufferedReader.readLine();
                System.out.println("已接收到客户端连接");
                System.out.println("服务端接收到客户端信息:" + info + ",当前客户端ip为:"
                        + socket.getInetAddress().getHostAddress());
            }
改成这样能够进入while了,但是还是出不来,而且我吧readLine去掉了,只要一读取内容就进不去while了
Jia_Li_z 2018-12-26
  • 打赏
  • 举报
回复
引用 7 楼 qq_39936465 的回复:

 in = socket.getInputStream();
InputStreamReader isr=new InputStreamReader(in);
BufferedInputStream  buf = new BufferedInputStream(isr);
while((String str=buf.readLine())!=null)
改这样试试
BufferedInputStream没有readLine这个方法吧!
Jia_Li_z 2018-12-26
  • 打赏
  • 举报
回复
引用 6 楼 LCL_data 的回复:
[quote=引用 5 楼 it-zjl 的回复:] 苦恼啊,昨天是转换不了,今天是接收不到
调试看下,temp里面有值没[/quote] debug走的时候,一到while就出不来了,拿工具测试,System.out.printf(Integer.toString(in.read()));打印除了221长度,但是走到while就跳不出来了,在while内的输出语句都没有出来
qq_39936465 2018-12-26
  • 打赏
  • 举报
回复

in = socket.getInputStream();
InputStreamReader isr=new InputStreamReader(in);
BufferedInputStream buf = new BufferedInputStream(isr);
while((String str=buf.readLine())!=null)


改这样试试
十八道胡同 2018-12-26
  • 打赏
  • 举报
回复
引用 5 楼 it-zjl 的回复:

苦恼啊,昨天是转换不了,今天是接收不到


调试看下,temp里面有值没
Jia_Li_z 2018-12-26
  • 打赏
  • 举报
回复
苦恼啊,昨天是转换不了,今天是接收不到
Jia_Li_z 2018-12-26
  • 打赏
  • 举报
回复
引用 1 楼 LCL_data 的回复:
while((len=in.read(buffer)) == -1) 这个是判断长度为-1 就继续while


            InputStream inputStream = socket.getInputStream();
            // 得到一个输入流,接收客户端传递的信息
            InputStreamReader inputStreamReader = new InputStreamReader(
                    inputStream);// 提高效率,将自己字节流转为字符流
            BufferedReader bufferedReader = new BufferedReader(
                    inputStreamReader);// 加入缓冲区
            String temp = null;
            String info = "";
            while ((temp = bufferedReader.readLine()) != null) {
                info += temp;
                System.out.println("已接收到客户端连接");
                System.out.println("服务端接收到客户端信息:" + info + ",当前客户端ip为:"
                        + socket.getInetAddress().getHostAddress());
            }
楼主,我试过了,这个是正确的,但是接收不到我发的消息
Jia_Li_z 2018-12-26
  • 打赏
  • 举报
回复
引用 2 楼 Defonds 的回复:
如果传递的消息是字符、文本、string 类的内容还是用 BufferedReader 效率高一些。具体用法楼上已给出。
我试过了,还是跳不出去,昨天我测试了一下,循环的时候length为8然后就跳不出去了,用的二楼的方法也是跳不出去,我客户端传递的就是1111而已
Defonds 2018-12-26
  • 打赏
  • 举报
回复
如果传递的消息是字符、文本、string 类的内容还是用 BufferedReader 效率高一些。具体用法楼上已给出。
十八道胡同 2018-12-26
  • 打赏
  • 举报
回复
while((len=in.read(buffer)) == -1) 这个是判断长度为-1 就继续while




InputStream inputStream = socket.getInputStream();
// 得到一个输入流,接收客户端传递的信息
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);// 提高效率,将自己字节流转为字符流
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);// 加入缓冲区
String temp = null;
String info = "";
while ((temp = bufferedReader.readLine()) != null) {
info += temp;
System.out.println("已接收到客户端连接");
System.out.println("服务端接收到客户端信息:" + info + ",当前客户端ip为:"
+ socket.getInetAddress().getHostAddress());
}

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧