socket程序,在server中监听到client的连接以后派生出一个线程来通讯,然后server继续监听client的连接请求。main代码如下:public class MyServer2_MultiUser extends Thread { // ... public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(5678);
while (true) {
// transfer location change Single User or Multi User
MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
mu.start();
}
}
}现在我想在client中发送一个halt命令,当服务端的相关通讯线程接收到这个命令以后就立即中断连接,并且同时也停止派生出它的MyServer2_MultiUser进程。请问该如何做?
ServerSocket server = new ServerSocket(5678);
while (true) {
// transfer location change Single User or Multi User
MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
mu.start();
}
}
}现在我想在client中发送一个halt命令,当服务端的相关通讯线程接收到这个命令以后就立即中断连接,并且同时也停止派生出它的MyServer2_MultiUser进程。请问该如何做?
public void threadStop(boolean isStop){
isStop = false;
}这样可以增加一个判断,如果接收一个halt时,就可以通过设置标志isStop为false,实现杀掉派生线程的需求。另外要在mu.start();前面加上break;结束主线程。
MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
这一句中等候新的连接了,所以除非一个新的连接接入,否则主线程没有机会做任何判断。
我感觉这里需要有一种主动的通知主线程的办法,就像accept监听客户端连接一样,主线程也需要有一种方法可以监听和处理来自子线程的通讯,我能想到的只有在主线程中开一个新的端口来监听子线程的通讯。除此以外还有没有其他什么办法呢?在这个地方有没有类似Windows中那样的消息相应机制可以使用呢?
public static ServerSocket server ;// 全局,扩大作用域
public static void main(String[] args) throws IOException {
server = new ServerSocket(5678);
while (true) {
// transfer location change Single User or Multi User
if(server != null) //加额外判断
{
MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
mu.start();
}
}
}
}
.................
{
try{
MyServer2_MultiUser.server.close();
MyServer2_MultiUser.server = null;
}
catch(Exception e)
{
e.printStackTrace();
}
}
......................