求助:socket获取数据报错

yeshio 2014-02-14 02:55:43
各位大侠,麻烦帮忙看下这个问题:
描述:
编写socket客户端代码,获取服务器返回的数据,连接服务器以后需要发送验证信息,成功后服务器会一直返回数据(服务器从第三方获取数据,数据以行的形式接收,从第三方接收到数据就返回给客户端),我的客户端以行的形式接收数据,但是需要一直连着服务器获取数据,如果使用循环的话报错。
主要代码:
socket=new Socket("191.165.215.17",8888);

InputStream in = new ByteArrayInputStream("QWAS".getBytes("UTF-8"));
BufferedReader sin = new BufferedReader(new InputStreamReader(in));

PrintWriter os = new PrintWriter(socket.getOutputStream());
os.println(readline);
os.flush();

InputStream ins= socket.getInputStream();
BufferedReader is=new BufferedReader(new InputStreamReader(ins));
String result = is.readLine();

只获取一次is.readLine()的话,没有问题,程序正常执行,结果正确。如果使用while循环多次获取就会报错。
报错信息:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at client.socket.java.SocketTcp5.main(SocketClient.java:53)

各位大侠帮忙指导一下吧,不胜感激~~
...全文
288 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeshio 2014-02-14
  • 打赏
  • 举报
回复
引用 5 楼 zhang3093966 的回复:
[quote=引用 4 楼 yeshio 的回复:] [quote=引用 2 楼 zhang3093966 的回复:] 楼主这样socket连接是否出现连接失败时会等待很长时间才会抛出异常?
输出socket.isConnected()为true,还是报错 [/quote] http://www.iteye.com/topic/253123 看看这个[/quote] 我后来把程序改成 InputStream ins= socket.getInputStream(); while(ins.available()>0){ BufferedReader is=new BufferedReader(new InputStreamReader(ins)); String result = is.readLine(); } 还是报同样的错误
  • 打赏
  • 举报
回复
引用 4 楼 yeshio 的回复:
[quote=引用 2 楼 zhang3093966 的回复:] 楼主这样socket连接是否出现连接失败时会等待很长时间才会抛出异常?
输出socket.isConnected()为true,还是报错 [/quote] http://www.iteye.com/topic/253123 看看这个
yeshio 2014-02-14
  • 打赏
  • 举报
回复
引用 2 楼 zhang3093966 的回复:
楼主这样socket连接是否出现连接失败时会等待很长时间才会抛出异常?
输出socket.isConnected()为true,还是报错
yeshio 2014-02-14
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
每次读以前,用 inputstream 的 available() 方法来判断是否有有效数据,有的话再读
使用inputstream.available()>0 再 String result = is.readLine(); 还是报错
  • 打赏
  • 举报
回复
楼主这样socket连接是否出现连接失败时会等待很长时间才会抛出异常?
Defonds 2014-02-14
  • 打赏
  • 举报
回复
每次读以前,用 inputstream 的 available() 方法来判断是否有有效数据,有的话再读

81,090

社区成员

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

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