我使用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)?