首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ServerSocket close方法不释放端口

是指在使用Java的ServerSocket类创建一个服务器套接字后,当调用其close方法关闭服务器套接字时,并不会立即释放该服务器套接字所占用的端口。

ServerSocket是Java提供的用于创建服务器端套接字的类,它负责监听指定端口上的连接请求,并创建相应的Socket对象与客户端进行通信。当调用ServerSocket的close方法关闭服务器套接字时,实际上是将该套接字标记为关闭状态,不再接受新的连接请求,但并不会立即释放所占用的端口。

这种行为是由于操作系统的TCP/IP协议栈的实现机制决定的。在TCP/IP协议中,端口具有一定的生命周期,即端口在被使用后会保持一段时间的状态,以便处理可能的网络延迟和重传等情况。这个状态被称为TIME_WAIT状态,处于该状态的端口在一段时间后才会被完全释放。

在Java中,ServerSocket的close方法会将底层的套接字关闭,并触发TCP连接的关闭过程。但是,由于操作系统的TCP/IP协议栈的实现机制,即使关闭了ServerSocket,端口仍然可能处于TIME_WAIT状态,这意味着在一段时间内该端口不能被其他应用程序使用。

为了解决这个问题,可以通过设置Socket的SO_REUSEADDR选项来重用处于TIME_WAIT状态的端口。在Java中,可以通过调用ServerSocket的setReuseAddress方法来设置该选项。设置SO_REUSEADDR选项后,关闭ServerSocket后,端口会立即释放,可以被其他应用程序使用。

总结起来,ServerSocket的close方法关闭服务器套接字时,并不会立即释放所占用的端口,这是由操作系统的TCP/IP协议栈的实现机制决定的。为了解决这个问题,可以通过设置Socket的SO_REUSEADDR选项来重用处于TIME_WAIT状态的端口。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux强制释放占用端口以及Linux防火墙端口开放方法详解

Linux查看端口情况的各种方法 所有端口的映射关系在 /etc/services 文件中有 Linux端口简单介绍,端口编号从0-65536,各编号端的用途如下: 0-1023:公认端口,与常见服务绑定...nmap 127.0.0.1 # 检查3306端口 netstat -anlp | grep 3306 # 检测3306接口 lsof -i:3306 linux释放占用端口解决办法 解决步骤如下...7列进程,形式如下:18989/nginx awk -F '/' '{print $1}' 截取进程PID:18989 xargs kill -s 9 使用前一个命令的输出作为参数,杀掉该进程 释放占用端口分步解决办法...kill -9 19664 linux防火墙释放端口 Linux防火墙启动和关闭 下面介绍的防火墙是iptable,对于firewalld并不适用。...–sport 数据从服务器出去,则为数据源端口使用 –j 指定是 ACCEPT -接收 或者 DROP 接收 以上即是关于Linux强制释放占用端口以及Linux防火墙端口开放方法

5.1K41

JAVASocket实现聊天室「建议收藏」

JAVASocket实现聊天室 文章目录 JAVASocket实现聊天室 Sokcet是什么 JAVA SOCKET编程中的两个重要对象 ServerSocket 构造方法 accept bind close...实现,如果指定默认本地IP。...socket套接字绑定IP和端口的实现,默认在ServerSocket的构造方法中会进行调用。...e; } } close 当主动调用close方法后,服务器会释放当前绑定的端口,并且自动断开和所有客户端之间的连接,只有主动执行了ServerSocketclose()方法,isClosed...当服务端的Sokcet关闭连接时,服务端与所有客户端的连接将全部断开,并且释放对应监听接口 聊天室实现 服务端实现 监听端口,调用accept方法等待客户端请求,另外新起两个线程分别针对客户端的读写进行处理

28410
  • Java基础之UDP协议和TCP协议简介及简单案例的实现

    网络通信的三要素: IP地址: 网络中设备的标识,也可以用主机名识别,但ip地址唯一,主机名唯一; 端口号: 用于标识进程的逻辑地址,是不同进程的标识; 传输协议: 也即通信的规则,常见的协议由 UDP...常用方法: receive(DatagramPacket p) :接收数据报文到p中。receive方法是阻塞的,如果没有接收到数据报包的话就会阻塞在哪里。...close() :关闭DatagramSocket。在应用程序退出的时候,通常会主动的释放资源,关闭Socket,但是由于异常的退出可能造成资源无法回收。...; os.write(str.getBytes()); //释放资源 s.close(); } } ServerDemo.java: package...s.close(); //ss.close(); //socket对象一般释放,因为客户端不止一个,可能有多个客户端会发送数据 } }

    86650

    第二十六天 网络编程【悟空教程】

    区别在于,UDP中只有发送端和接收端,区分客户端与服务器端,计算机之间可以任意地发送数据。...通过查阅API文档可知,ServerSocket类提供了多种构造方法,接下来就对ServerSocket的构造方法进行逐一地讲解。 ?...使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上(参数port就是端口号)。 接下来学习一下ServerSocket的常用方法,如表所示。 ?...ServerSocket对象负责监听某台计算机的某个端口号,在创建ServerSocket对象后,需要继续调用该对象的accept()方法,接收来自客户端的请求。...}; }.start(); } //serverSocket.close(); } } 第2章 网络编程总结 IP地址:用来唯一表示我们自己的电脑的,是一个网络标示 端口号: 用来区别当前电脑中的应用程序的

    58060

    【Java】网络编程

    2.2 Socket类 构造方法 成员方法 2.3 ServerSocket类 构造方法 成员方法 2.4 简单的TCP网络程序 TCP通信分析图解 客户端向服务器发送数据 服务器向客户端回写数据 第三章...构造方法 public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。...对象,绑定端口,开始等待连接        ServerSocket ss = new ServerSocket(6666);        // 2.接收连接 accept 方法, 返回 socket...对象,绑定端口,开始等待连接        ServerSocket ss = new ServerSocket(6666);        // 2.接收连接 accept 方法, 返回 socket...(); // ============================ // 4.释放资源 socket.close(); bis.close

    74230

    【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法

    对于服务器这一端来说,需要在 socket 对象创建的时候,就指定一个端口号 port,作为构造方法的参数 后续服务器开始运行之后,操作系统就会把端口号和该进程关联起来 端口号的作用就是来区分进程的,...当我们收到数据的时候,哪个进程来处理,就需要通过端口号去区分 - 所以就需要在程序一启动的时候,就把这个程序关联哪个端口指明清楚 在调用这个构造方法的过程中,JVM 就会调用系统的 Socket API...资源释放 当前的服务器代码,针对 clientSocket 没有进行 close 操作while(true) { //建立连接 Socket clientSocket = serverSocket.accept...,进程关了之后他俩对应的资源也释放了 但此处的 clientSocket 并非如此,它是“连接级别”的数据,随着客户端断开连接了,这个 Socket 也就不再使用了,但资源是释放的 - 即使是同一个客户端...GC 释放的是内存资源,此处讨论的“文件资源泄露”是针对文件描述符的 其实,流对象如果被 GC 回收了,也是会自动执行 close 的,但是由于 GC 过程是不可逆的(不知道 GC 什么时候发生,也不知到这次

    5010

    【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )

    调用 Socket 对象的 close 方法之后的处理方式 // 1> 默认情况 : false , 0 // 如果 boolean on...设置成false , 处理连接的缓存数据 , 调用 close 会立刻关闭连接 // 系统底层会操作输出流发送剩余缓存数据 , 将缓冲区中的数据发送给连接对方...释放资源 //1....先运行服务器端 : 服务器端端 ServerSocket 创建完毕 服务器端端 ServerSocket 设置完毕 服务器端端 ServerSocket 绑定 8888 端口完毕 2....最终查看服务器端打印 : 服务器端端 ServerSocket 创建完毕 服务器端端 ServerSocket 设置完毕 服务器端端 ServerSocket 绑定 8888 端口完毕 客户端 : /192.168.87.2

    78610

    七层协议和TCPIP协议、三次握手四次挥手、BIO、NIO(Netty前置)

    undefineda 数据传输前必须要建立连接,数据传输完,必须释放连接。undefinedb 传输的数据无差错,丢失,不重复,且顺序和源数据一致。...socket.close(); } } 4.2.2 BIO中API讲解 Socket a 构造方法Socket():无参构造方法。...int getLoacalPort():返回此套接字绑定的本地端口。 intgetPort():返回此套接字连接的远程端口ServerSocket():无参构造方法。...ServerSocket(int port,int backlog,InetAddress bindAddr):使用指定的端口、监听 backlog 和要绑定到本地的 IP 地址创建服务器b 普通方法Server...void bind(SocketAddress endpoint):将 ServerSocket 绑定到指定地址(IP 地址和端口号)。 void close():关闭此套接字。

    55630
    领券