繁体   English   中英

Java服务器套接字程序在一天后停止监听

[英]Java server socket program after one day it stops listening

我有一台服务器,并且那台机器运行服务器套接字代码。 我已经使用线程池来维护线程。 问题是,当我启动服务器套接字时,它的监听很好。 但是第二天,我看到控制台在某种程度上暂停了,没有监听任何TCP数据包。 没有生成异常。 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
    }
}

处理程序类

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);
        }
    }
}

尝试in Handler finally块中关闭insocket ,以确保您的系统没有资源不足。

@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+,则可能需要尝试使用resources

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM