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进程。请问该如何做?

解决方案 »

  1.   

    建议用数组或者ArrayList/Vector记录你在while循环里面的MyServer2_MultiUser实例,当接收到halt命令,用for循环从数组中取出记录的实例,逐个停止。
      

  2.   

    是否可以在类里面添加一个过程
    public void threadStop(boolean isStop){
      isStop = false;
    }这样可以增加一个判断,如果接收一个halt时,就可以通过设置标志isStop为false,实现杀掉派生线程的需求。另外要在mu.start();前面加上break;结束主线程。
      

  3.   

    谢谢楼上的两位,这样不行,因为接受命令是在派生线程中进行的,当派生线程在处理命令的时候,主线程已经停在
    MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
    这一句中等候新的连接了,所以除非一个新的连接接入,否则主线程没有机会做任何判断。
    我感觉这里需要有一种主动的通知主线程的办法,就像accept监听客户端连接一样,主线程也需要有一种方法可以监听和处理来自子线程的通讯,我能想到的只有在主线程中开一个新的端口来监听子线程的通讯。除此以外还有没有其他什么办法呢?在这个地方有没有类似Windows中那样的消息相应机制可以使用呢?
      

  4.   

    public class MyServer2_MultiUser extends Thread {  // ...
      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();
       }
    }
    ......................