我正在创建一个多客户端/服务器应用程序,只要有任何客户端断开连接 我的服务器它只是挂起。 如何设置任何条件,告诉我什么时候打印一些消息 任何客户端都与服务器断开连接 这是我的服务器代码
class ServerThread implements Runnable {
public void run() {
Socket socket = null;
try {
System.out.println("server starting.......");
serverSocket = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
try {
System.out.println("Ready to accept.......");
socket = serverSocket.accept();
System.out.println(" client Connected with ip address =" +socket.getRemoteSocketAddress().toString());
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
} catch (IOException e) {
e.printStackTrace();
System.out.println("catch block");
}
}
}
}
class CommunicationThread implements Runnable {
private Socket clientSocket;
private BufferedReader input;
public CommunicationThread(Socket clientSocket) {
this.clientSocket = clientSocket;
try {
this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String read = input.readLine();
updateConversationHandler.post(new updateUIThread(read));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
任何帮助将不胜感激
答案 0 :(得分:0)
目前尚不清楚您是否因为会话结束而意味着断开连接(即:所有内容都已成功完成)或断开连接是因为某些网络问题(或客户端取消了请求)。
如果这是第一种情况,那么很容易:您正在使用的协议(您自己的协议,http或其他协议)负责定义如何确定会话已结束。如果出现这种情况,那么你只需关闭套接字。
如果是第二种情况,那么您必须有一个算法来确定是否必须关闭连接。例如,通过实现超时或慢读阈值。有关如何设置超时的说明,请查看Socket's javadoc。
值得注意的是,当您想要练习或学习某些内容时,可以创建自己的服务器,但是最好使用现有的解决方案,例如vert.x或Wildfly的精简版本,例如。如今,此类服务器的开销非常低,同时仍提供非常强大的网络功能。