0

I using nanoHttpD to read a put request and parse a atom xml, my client will keep read a file and send the xml every 5 sec, but some how the client socket keep closing.

client code

 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 code

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());
        }
    });

Is it due to the setSoTimeout(SOCKET_READ_TIMEOUT)?

user3333603
  • 81
  • 1
  • 1
  • 10

0 Answers0