【问题标题】:execute code when exiting while loop by pressing ctrl+C [duplicate]通过按 ctrl+C 退出 while 循环时执行代码 [重复]
【发布时间】:2013-07-27 14:16:39
【问题描述】:

我已经实现了一个如下所示的服务器。想法是向连接到它的客户端发送“GoodBye”消息。我的问题是我有一个while循环。当它退出while循环时(当我按 ^C) 时,我希望它关闭套接字。这种情况我该如何处理。终于不做了。

import java.net.*;
import java.io.*;

public class GreetingServer extends Thread
{
   private ServerSocket serverSocket;

   public GreetingServer() throws IOException
   {
      serverSocket = new ServerSocket(5063);
      serverSocket.setSoTimeout(0);
   }

   public void run()
   {
      Socket server = null;
      try
      {
      server = serverSocket.accept();
      }
      catch(SocketTimeoutException s)
      {
          System.out.println("Socket timed out!");
      }
      catch(IOException e)
      {
          e.printStackTrace();
      }

      while(true)
      {
         try
         {
            System.out.println("Just connected to "
                                + server.getRemoteSocketAddress());

            DataOutputStream out = new DataOutputStream(server.getOutputStream());

            out.writeUTF("\nGoodbye!");
         }
     catch(SocketTimeoutException s)
         {
            System.out.println("Socket timed out!");
         }
     catch(IOException e)
         {
            e.printStackTrace();
         }
     finally
     {
        try
            {
               server.close();  
            }
        catch (IOException e)
            {
          e.printStackTrace();
            }
    }
      }

   }
   public static void main(String [] args)
   {
      try
      {
         Thread t = new GreetingServer();
         t.start();
      }
      catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

【问题讨论】:

  • SIGINT 的信号处理程序

标签: java


【解决方案1】:

您可以将shutdown hook 附加到 JVM,只要 JVM 关闭,它就会运行。

快速 google 将帮助您入门。

【讨论】:

  • 你还会发现 TCP 套接字“存活”了一段时间——你不能关闭它们并立即在同一个端口上重新打开。如果您使用 Google 搜索,您会找到原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多