2014-06-05 28 views
1

我有一台服务器和那台机器运行服务器套接字代码。 我已经使用线程池来维护线程。 问题是,当我启动服务器套接字它听的很好。 但第二天,我看到在某个级别暂停的控制台,没有在任何TCP数据包监听。 没有生成异常。 在java中的服务器上有监听数据包的限制吗? 我该如何解决这个问题?Java服务器套接字程序一天后,它停止收听

服务器类

public final class Server { 

    private final ServerSocket serverSocket; 
    private final ExecutorService pool; 



    public Server(int port, int poolSize) 
      throws IOException { 
     serverSocket = new ServerSocket(port); 
     pool = Executors.newFixedThreadPool(poolSize); 


     System.out.println("Server running..."); 
     runServerEngine(); 
    } 

    public void runServerEngine() { // run the service 
     try { 
      while (true) { 
       System.out.println("user come "); 
       pool.execute(new Handler(serverSocket.accept())); 
      } 
     } catch (IOException ex) { 
      System.out.println("Error " + ex); 


      //pool.shutdown(); 
     } 
    } 

    public static void main(String[] args) throws IOException { 
     Server server = new Server(1256, 20);//port number and pooling size 
    } 
} 

Handler类

class Handler implements Runnable { 

    private Socket socket = null; 
    //private static Location location = new Location(); 


    Handler(Socket socket) { 
     this.socket = socket; 

    } 

    private Handler() { 
    } 
    String recievedPacket = null; 

    @Override 
    public void run() { 
     // read and service request on socket 
     try { 
      BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); 

      while ((recievedPacket = in.readLine()) != null) { 
       //recievedPacket = in.readLine(); 
       System.out.println("Recieved packate " + recievedPacket); 

       if (recievedPacket != null) { 
        try { 
         System.out.println("Saving function " + recievedPacket); 


        } catch (Exception ex) { 
         System.out.println(ex); 
        } 

       } 

      } 

     } catch (IOException ex) { 
      System.out.println(ex); 
     } 
    } 
} 
+0

它在监听该端口吗?尝试netstat。你采取了线程转储? (通过ctrl + break)它运行吗?客户端/服务器之间是否存在路由器或类似物,导致静态TCP连接断开? –

+0

服务器监听没有限制,请将您的代码放在我们可以帮助您。 – Mifmif

+1

我认为你应该正确地处理你的资源,就像关闭'Handler'中的套接字和阅读器一样。毕竟可能是资源问题。 –

回答

1

尝试关闭insocket在最后的Handler块确保您的系统是不是资源不足。

@Override 
public void run() { 
    // read and service request on socket 
    BufferedReader in = null; 
    try { 
     in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); 

     while ((recievedPacket = in.readLine()) != null) { 
      //recievedPacket = in.readLine(); 
      System.out.println("Recieved packate " + recievedPacket); 

      if (recievedPacket != null) { 
       try { 
        System.out.println("Saving function " + recievedPacket); 


       } catch (Exception ex) { 
        System.out.println(ex); 
       } 

      } 

     } 

    } catch (IOException ex) { 
     System.out.println(ex); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException ex) { 
       // No-OP 
      } 

     } 

     if (socket != null) { 
      try { 
       scoket.close(); 
      } catch (IOException ex) { 
       // No-OP 
      } 
     } 
    } 
} 

如果你是Java 7+,你可能想看看try with resources