Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用ServerSocket.close()是否足以关闭端口?_Java_Sockets_Serversocket - Fatal编程技术网

Java 调用ServerSocket.close()是否足以关闭端口?

Java 调用ServerSocket.close()是否足以关闭端口?,java,sockets,serversocket,Java,Sockets,Serversocket,我有一些java代码看起来与此类似: private void startServer() throws IOException { URLClassLoader classloader = null; System.out.println("Opening server socket for listening on " + PORT_NUMBER); try { server = new ServerSocket(PO

我有一些java代码看起来与此类似:

private void startServer() throws IOException {
        URLClassLoader classloader = null;

        System.out.println("Opening server socket for listening on " + PORT_NUMBER);
        try {
            server = new ServerSocket(PORT_NUMBER);
            server.setSoTimeout(10000);
            connected = true;
            System.out.println("Server is now listening on port " + PORT_NUMBER);
        } catch (IOException e) {
            System.err.println("Could not start server on port " + PORT_NUMBER);
            e.printStackTrace();
            connected = false;
        }

        while (connected) {

            // Incoming request handler socket.
            Socket socket = null;
            try {
                System.out.println("Waiting for client connection...");
                // Block waiting for an incoming connection.
                socket = server.accept();
                if (socket == null) continue;
……等等。当我稍后调用server.close()时(如果我先调用socket.close(),我不会得到任何不同的行为),我不会得到任何错误,但是netstat显示端口仍在监听中。调用ServerSocket.close()是否足以释放此系统上的端口

我正在为Java 1.4.2微环境运行时编程。还值得注意的是,我在另一个线程中运行了这个方法,我正在尝试从父线程关闭套接字

EDIT Here是来自netstat的一行,尽管我可以向您保证它仍在被监听,因为如果我再次启动Xlet,我会收到该端口号的异常

tcp        0      0  *.2349                 *.*                    LISTEN

有几件事要考虑。下面引用ServerSocket的JavaDoc来描述其中一个

public void setReuseAddress(布尔值为on) 抛出SocketException

启用/禁用 所以请重新使用EADDR套接字选项。当TCP连接关闭时 之后,连接可能会在一段时间内保持超时状态 连接已关闭(通常称为时间等待状态或 2MSL等待状态)。用于使用已知套接字地址的应用程序 或端口可能无法将套接字绑定到所需的端口 如果有连接处于超时状态,则为SocketAddress 套接字地址或端口


因此,在您
close()
server socket之后,操作系统仍然可以显示出发生了什么事情,这还算可以。但是如果你经常在同一个端口上打开/关闭一个服务器套接字,你可能会碰到一个问题。

< P>有很多事情要考虑。下面引用ServerSocket的JavaDoc来描述其中一个

public void setReuseAddress(布尔值为on) 抛出SocketException

启用/禁用 所以请重新使用EADDR套接字选项。当TCP连接关闭时 之后,连接可能会在一段时间内保持超时状态 连接已关闭(通常称为时间等待状态或 2MSL等待状态)。用于使用已知套接字地址的应用程序 或端口可能无法将套接字绑定到所需的端口 如果有连接处于超时状态,则为SocketAddress 套接字地址或端口


因此,在您
close()
server socket之后,操作系统仍然可以显示出发生了什么事情,这还算可以。但是,如果您要经常打开/关闭同一端口上的服务器套接字,可能会遇到问题。

当您说该端口仍在侦听时,您看到了什么?请发布netstat line.OT,但您的“connected”变量命名错误。此时您没有连接到任何东西,您只是在侦听连接。而且,在测试时,
accept()之后,
socket
也不能直接为空。
不要编写无意义的代码。当您说端口仍在侦听时,您看到了什么?请发布netstat line.OT,但您的“connected”变量命名错误。此时您没有连接到任何东西,您只是在侦听连接。另外,
socket
在您测试它时,不能在
accept()之后立即为空。
不要编写无意义的代码。