Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131608966
出自【进步*于辰的博客

注:
1、IP 类:InetAddress类
2、套接字 IP 类:InetSocketAddress类;
3、套接字类:Socket类。

1、概述

继承关系:

  • java.lang.Object
    • java.net.ServerSocket

实现的所有接口
CloseableAutoCloseable
直接已知子类:
SSLServerSocket


public class ServerSocket extends Object

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。

本质:
此类负责服务器套接字的搭建,其本质也是套接字(Socket)。因此,除服务器搭建的相关功能之外,如:获取输入/输出流、绑定套接字 IP,都是通过套接字类 来实现。(见源码)

从以下版本开始:
JDK1.0
另请参见:
SocketImplsetSocketFactory(java.net.SocketImplFactory)ServerSocketChannel

2、构造方法摘要

2.1 null

创建非绑定服务器套接字。
说明:
先看源码。
在这里插入图片描述
关于setImpl(),可参考套接字类的第5.2项。

2.2 int port

创建绑定到特定端口的服务器套接字。
说明:
先看源码。
在这里插入图片描述

指定:
连接请求)的最大队列长度为 50
ip地址为 null

底层调用第4项。

2.3 int port, int backlog

利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
说明:
先看源码。
在这里插入图片描述

指定:
ip地址为 null

底层调用下1项。

2.4 int port, int backlog, InetAddress bindAddr

使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。
说明:
先看源码。
在这里插入图片描述
关于setImpl(),可参考套接字类的第5.2项;关于bind(),见第3.3项。

示例:

InetAddress ip = InetAddress.getByName("localhost");
ServerSocket server = new ServerSocket(8080, 1, ip);
sout "等待";
Socket client = server.accept();
sout "已连接";

业务:通过本地 ip,建立在端口8080上,构建Socket服务器,可接收1个连接请求。

3、方法摘要

3.1 Socket accept()

侦听并接受到此套接字的连接。

3.2 void bind(SocketAddress endpoint)

将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
说明:
先看源码。
在这里插入图片描述

指定:
连接请求)的最大队列长度为 50

底层调用下1项。

3.3 void bind(SocketAddress endpoint, int backlog)

将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
说明:
先看源码。
在这里插入图片描述
关于isClosed(),见第14项。

!oldImpl && isBound()为 true 说明:

  1. bound = true,表示“已绑定”;
  2. oldImpl = false,表示当前套接字实现类是“新的”(即“可用”)。(可进一步证明在套接字类的第5.1项中我对字段oldImpl作用的判断和总结)

endpoint instanceof InetSocketAddress表示仅支持“套接字 IP”。

关于isUnresolved()/getAddress()/getPort(),见套接字 IP 类的第3.7、3.3、3.5项;关于checkListen(),见SecurityManager类的第4.12项;关于getImpl(),可参考套接字类的第5.6项;关于bind(),见套接字类的第3.1项。

进入listen()。(出自实现类 AbstractPlainSocketImpl)
在这里插入图片描述
进入socketListen()。(出自实现类 PlainSocketImpl)
在这里插入图片描述
关于socketListen(),暂不知底层调用了哪里。

3.4 void close()

关闭此套接字。

3.5 ServerSocketChannel getChannel()

返回与此套接字关联的惟一 ServerSocketChannel 对象(如果有)。

3.6 InetAddress getInetAddress()

返回此服务器套接字的本地地址。

3.7 int getLocalPort()

返回此套接字在其上侦听的端口。

3.8 SocketAddress getLocalSocketAddress()

返回此套接字绑定的端点的地址,如果尚未绑定则返回 null。

3.9 int getReceiveBufferSize()

获取此 ServerSocket 的 SO_RCVBUF 选项的值,该值是将用于从此 ServerSocket 接受的套接字的建议缓冲区大小。

3.10 int getReuseAddress()

测试是否启用 SO_REUSEADDR

3.11 int getSoTimeout()

重新恢复 SO_TIMEOUT 的设置。

3.12 protected int implAccept(Socket s)

ServerSocket 的子类使用此方法重写 accept() 以返回它们自己的套接字子类。

3.13 boolean isBound()

返回 ServerSocket 的绑定状态。

3.14 boolean isClosed()

返回 ServerSocket 的关闭状态。

3.15 void setPerformancePreferences(int connectionTime, int latency, int bandwidth)

设置此 ServerSocket 的性能偏好 (performance preferences)。

3.16 void setReceiveBufferSize(int size)

为从此 ServerSocket 接受的套接字的 SO_RCVBUF 选项设置默认建议值。

3.17 void setReuseAddress(boolean on)

启用/禁用 SO_REUSEADDR 套接字选项。

3.18 static void setSocketFactory(SocketImplFactory fac)

为应用程序设置服务器套接字实现工厂。

3.19 void setSoTimeout(int timeout)

启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。

3.20 String toString()

作为 String 返回此套接字的实现地址和实现端口。

最后

如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


本文暂缓更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

谢谢打赏!!很高兴可以帮到你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值