客户端套接字自动关闭

时间:2015-04-14 12:02:09

标签: java android file http nanohttpd

我使用nanoHttpD读取一个put请求并解析一个原子xml,我的客户端将继续读取一个文件并每隔5秒发送一次xml,但是一些客户端套接字如何继续关闭。

客户端代码

 clientSocket = new Socket(Setting.HOST_ATOMSERVER, 4567);

    try {
        while (clientSocket.isConnected()) {
            output = new PrintStream(clientSocket.getOutputStream(), true);
            input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            filereader = new BufferedReader(new InputStreamReader(new FileInputStream(csInputPath)));
            AtomFeed atomXML = new AtomFeed(filereader);

            // send header and body
            System.out.println("send");
            output.print(Setting.HTTP_RESPONSE_PUT + " /atom.xml " + Setting.HTTP_VERSION + Setting.CRLF + Setting.CRLF + atomXML.xmlString);
            String line;
            while ((line = input.readLine()) != null) {
                System.out.println(line);
                if (line.equals("Bye"))
                    break;
            }
            Thread.sleep(5000);
        }


    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        output.flush();
        output.close();
        input.close();
    }

NanothttpD代码

thread = new Thread(new Runnable() {
        @Override
        public void run() {
            do {
                try {
                    final Socket serverSocketAccept = serverSocket.accept();
                    serverSocketAccept.setSoTimeout(SOCKET_READ_TIMEOUT);
                    addClient(serverSocketAccept);
                    final InputStream inputStream = serverSocketAccept.getInputStream();
                    asyncRunner.exec(new Runnable() {
                        @Override
                        public void run() {
                            OutputStream outputStream = null;
                            try {
                                outputStream = serverSocketAccept.getOutputStream();
                                HTTP session = new HTTP(inputStream, outputStream, serverSocketAccept.getInetAddress(), rootDirs, INDEX_FILE_NAMES, MIME_TYPES);
                                while (!serverSocketAccept.isClosed()) {
                                    session.execute();
                                    System.out.println();
                                }
                            } catch (Exception e) {
                                if (!(e instanceof SocketException && "Atom Server Shutdown".equals(e.getMessage()))) {
                                    e.printStackTrace();
                                }
                            } finally {
                                safeClose(outputStream);
                                safeClose(inputStream);
                                safeClose(serverSocketAccept);
                                removeClient(serverSocketAccept);
                            }
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } while (!serverSocket.isClosed());
        }
    });

是否由于setSoTimeout(SOCKET_READ_TIMEOUT)?

0 个答案:

没有答案
相关问题