我有一个缓冲读取器,由于某种原因,它不会从我从客户端发送的打印流中读取文本。这是每次line = in.readline
时失败的点此外,我已检查并且服务器已连接。
这是错误
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
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 Server.ServerListener$getXML.run(ServerListener.java:82)
at java.lang.Thread.run(Thread.java:662)
提前致谢
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
//PrintStream out = new PrintStream(server.getOutputStream());
System.out.println("Start");
//read the xml
boolean connected = server.isConnected();
System.out.println("xml: "+ connected);
line = in.readLine();
System.out.println("Postread");
while ((line = in.readLine()) != null) {
System.out.println("while1");
xml = xml + line;
System.out.println("while2");
}`
答案 0 :(得分:2)
isConnected()告诉您套接字是否已连接到连接,而不是连接是否仍连接到对等方。显然你还没有连接。 “连接重置”有几个可能的原因:您写入已被另一端关闭的连接(应用程序协议错误);另一端中断了连接;本地TCP堆栈遇到网络错误发送并已放弃。其中第一个很可能是怀疑。并且不要在网络中使用PrintStreams / Writers,因为它们会吞下您需要了解的异常。并且您在第一次调用readLine()时丢弃了一行数据:删除它并将其保留在循环中。