2016-10-06 34 views
-2

在我的主线程我有一段时间(听)循环它调用accept()方法我ServerSocket对象上,然后开始一个新的客户端线程,并将其添加到集合时,新客户被接受。 但是,while(listen)循环中的accept()调用会阻塞,我正在努力关闭连接。请找到我的下面的示例代码,有没有什么办法来创建封装服务来关闭下面的服务器端程序的套接字连接。多线程插座 - 无法关闭套接字正常

public static final void serverSocket(IData pipeline) throws ServiceException { 
    int clientNumber = 0; 
    ServerSocket listener = null; 
    int port =0; 
    Properties socketProperties = new Properties(); 

    try 
    { 
     listener = new ServerSocket(port); 
     System.out.println(listener.getLocalSocketAddress());   
    } 

    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 

     while(true){ 
      new Connections(listener.accept(), clientNumber++).start(); 

     } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 

    } 
    finally{ 

     try { 
      listener.close(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

private static class Connections extends Thread { 

    private Socket socket; 
    private int clientNumber; 


    public Connections(Socket socket, int clientNumber) { 
     this.socket = socket; 
     this.clientNumber = clientNumber; 
     log("New connection with client# " + clientNumber + " at " + socket); 
    } 

    public void run() 
    { 
     try { 

      // Send a welcome message to the client. 

      while (true) 

      { 

       // my program 
      } 
     catch (IOException e) { 

      //exception 
     } 

     finally { 

      try { 
       socket.close(); 

      } 
       catch (IOException e) { 
     log.error("Couldn't close a socket, what's going on?"); 
      } 
      log("Connection with client# " + clientNumber + " closed"); 

     } 
    } 

任何建议将不胜感激。

+0

当'Connections'对象或者完成什么是应该做的或遇到它使用的插座上EOS或致命'IOException'的连接应该被关闭。例子比比皆是。不清楚问题是什么。 – EJP

回答

0

您没有充分描述您想要关闭时指定的情况。

在任何情况下,你的ServerSocket对象可能会成为一个静态字段是提供给其他线程(S),而其他线程可以决定何时关闭。

+0

我想创建一个单独的java代码来停止socket端口,我们如何实现它? – Dil

+1

@Dil下定决心。如果您想停止侦听套接字,请关闭它。但是你的问题是关闭连接,这不是一回事。 – EJP

+0

明白了,谢谢:),抱歉让人困惑。其实,现在我面临着另一个麻烦。例如, – Dil