BufferedReader从套接字读取

时间:2011-10-06 20:32:50

标签: java sockets connection bufferedreader

我有一个缓冲读取器,由于某种原因,它不会从我从客户端发送的打印流中读取文本。这是每次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");
            }`

1 个答案:

答案 0 :(得分:2)

isConnected()告诉您套接字是否已连接到连接,而不是连接是否仍连接到对等方。显然你还没有连接。 “连接重置”有几个可能的原因:您写入已被另一端关闭的连接(应用程序协议错误);另一端中断了连接;本地TCP堆栈遇到网络错误发送并已放弃。其中第一个很可能是怀疑。并且不要在网络中使用PrintStreams / Writers,因为它们会吞下您需要了解的异常。并且您在第一次调用readLine()时丢弃了一行数据:删除它并将其保留在循环中。

相关问题