【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131608966
出自【进步*于辰的博客】
注:
1、IP 类:InetAddress类;
2、套接字 IP 类:InetSocketAddress类;
3、套接字类:Socket类。
1、概述
继承关系:
- java.lang.Object
- java.net.ServerSocket
实现的所有接口
Closeable、AutoCloseable
直接已知子类:
SSLServerSocket
public class ServerSocket extends Object
此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。
本质:
此类负责服务器套接字的搭建,其本质也是套接字(Socket)。因此,除服务器搭建的相关功能之外,如:获取输入/输出流、绑定套接字 IP,都是通过套接字类 来实现。(见源码)
从以下版本开始:
JDK1.0
另请参见:
SocketImpl、setSocketFactory(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 说明:
-
bound = true
,表示“已绑定”; -
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三个版本》。文章来源:https://www.toymoban.com/news/detail-545140.html
本文暂缓更新。文章来源地址https://www.toymoban.com/news/detail-545140.html
到了这里,关于Java-API简析_java.net.ServerSocket类(基于 Latest JDK)(浅析源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!