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)?