树叶云鸿蒙OS教程:鸿蒙OS SocketOptions

SocketOptions

public interface SocketOptions

获取/设置套接字选项的方法接口。 该接口由:SocketImpl 和 DatagramSocketImpl 实现。 这些子类应该覆盖这个接口的方法,以支持他们自己的选项。

在此接口中指定选项的方法和常量仅用于实现。 如果您没有继承 SocketImpl 或 DatagramSocketImpl,则不会直接使用它们。 在 Socket、ServerSocket、DatagramSocket 和 MulticastSocket 中有类型安全的方法来获取/设置这些选项。

字段摘要

修饰符和类型字段描述
static intIP_MULTICAST_IF设置发送多播数据包的出接口。
static intIP_MULTICAST_IF2和上面一样。
static intIP_MULTICAST_LOOP此选项启用或禁用多播数据报的本地环回。
static intIP_TOS此选项设置 TCP 或 UDP 套接字的 IP 标头中的服务类型或流量类别字段。
static intSO_BINDADDR获取套接字的本地地址绑定(此选项不能“设置”,只能“获取”,因为套接字是在创建时绑定的,因此不能更改本地绑定地址)。
static intSO_BROADCAST为套接字设置 SO_BROADCAST。
static intSO_KEEPALIVE如果为 TCP 套接字设置了 keepalive 选项,并且在 2 小时内没有通过套接字在任一方向上交换数据(注意:实际值取决于实现),TCP 会自动向对等方发送 keepalive 探测。
static intSO_LINGER指定关闭时延迟超时。
static intSO_OOBINLINE当设置 OOBINLINE 选项时,套接字上接收到的任何 TCP 紧急数据都将通过套接字输入流接收。
static intSO_RCVBUF设置平台用于传入网络 I/O 的底层缓冲区大小的提示。
static intSO_REUSEADDR为套接字设置 SO_REUSEADDR。
static intSO_SNDBUF设置平台用于传出网络 I/O 的底层缓冲区大小的提示。
static intSO_TIMEOUT设置阻塞 Socket 操作的超时时间:
static intTCP_NODELAY禁用此连接的 Nagle 算法。

方法总结

修饰符和类型方法描述
ObjectgetOption(int optID)获取选项的值。
voidsetOption(int optID, Object value)启用/禁用 optID 指定的选项。

字段详细信息

IP_MULTICAST_IF

static final int IP_MULTICAST_IF

设置发送多播数据包的出接口。 在具有多个网络接口的主机上很有用,其中应用程序希望使用系统默认值以外的方式。 获取/返回一个 InetAddress。

对多播有效:DatagramSocketImpl

IP_MULTICAST_IF2

static final int IP_MULTICAST_IF2

和上面一样。 引入此选项后,IP_MULTICAST_IF 的行为将保持与以前相同,而此新选项可以支持使用 IPv4 和 IPv6 地址设置传出接口。 注意:确保与此没有冲突

IP_MULTICAST_LOOP

static final int IP_MULTICAST_LOOP

此选项启用或禁用多播数据报的本地环回。 多播套接字默认启用此选项。

IP_TOS

static final int IP_TOS

此选项设置 TCP 或 UDP 套接字的 IP 标头中的服务类型或流量类别字段。

SO_BINDADDR

static final int SO_BINDADDR

获取套接字的本地地址绑定(此选项不能“设置”,只能“获取”,因为套接字是在创建时绑定的,因此不能更改本地绑定地址)。 套接字的默认本地地址是 INADDR_ANY,表示多宿主主机上的任何本地地址。 多宿主主机可以使用此选项仅接受到其地址之一的连接(在 ServerSocket 或 DatagramSocket 的情况下),或指定其到对等方的返回地址(对于 Socket 或 DatagramSocket)。 此选项的参数是 InetAddress。

此选项必须在构造函数中指定。

适用于:SocketImpl、DatagramSocketImpl

SO_BROADCAST

static final int SO_BROADCAST

为套接字设置 SO_BROADCAST。 此选项启用和禁用进程发送广播消息的能力。 它仅支持数据报套接字,并且仅在支持广播消息概念的网络(例如以太网、令牌环等)上受支持,并且默认为 DatagramSockets 设置。

SO_KEEPALIVE

static final int SO_KEEPALIVE

如果为 TCP 套接字设置了 keepalive 选项,并且在 2 小时内没有通过套接字在任一方向上交换数据(注意:实际值取决于实现),TCP 会自动向对等方发送 keepalive 探测。 此探测是对等方必须响应的 TCP 段。 期望三个响应之一: 1. 对等点以期望的 ACK 响应。 不通知应用程序(因为一切正常)。 TCP 将在另外 2 小时不活动后发送另一个探测。 2. 对端响应一个 RST,告诉本地 TCP 对端主机已经崩溃并重新启动。 插座已关闭。 3. 对端无响应。 插座已关闭。 此选项的目的是检测对等主机是否崩溃。 仅对 TCP 套接字有效:SocketImpl

SO_LINGER

static final int SO_LINGER

指定关闭时延迟超时。 此选项禁用/启用从 TCP 套接字的 close() 立即返回。 使用非零整数超时启用此选项意味着 close() 将阻止等待写入对等方的所有数据的传输和确认,此时套接字将正常关闭。 达到延迟超时后,套接字将通过 TCP RST 强制关闭。 启用超时为零的选项会立即强制关闭。 如果指定的超时值超过 65,535,它将减少到 65,535。

仅对 TCP 有效:SocketImpl

SO_OOBINLINE

static final int SO_OOBINLINE

当设置 OOBINLINE 选项时,套接字上接收到的任何 TCP 紧急数据都将通过套接字输入流接收。 当该选项被禁用(这是默认设置)时,紧急数据将被静默丢弃。

SO_RCVBUF

static final int SO_RCVBUF

设置平台用于传入网络 I/O 的底层缓冲区大小的提示。 当在 set 中使用时,这是应用程序向内核提出的关于用于通过套接字接收数据的缓冲区大小的建议。 在 get 中使用时,它必须返回平台在此套接字上接收数据时实际使用的缓冲区大小。 适用于所有套接字:SocketImpl、DatagramSocketImpl

SO_REUSEADDR

static final int SO_REUSEADDR

为套接字设置 SO_REUSEADDR。 这仅用于 java 中的 MulticastSockets,默认情况下为 MulticastSockets 设置。

适用于:DatagramSocketImpl

SO_SNDBUF

static final int SO_SNDBUF

设置平台用于传出网络 I/O 的底层缓冲区大小的提示。 当在 set 中使用时,这是应用程序向内核提出的关于用于通过套接字发送的数据的缓冲区大小的建议。 在 get 中使用时,这必须返回平台在此套接字上发送数据时实际使用的缓冲区大小。 适用于所有套接字:SocketImpl、DatagramSocketImpl

SO_TIMEOUT

static final int SO_TIMEOUT

设置阻塞 Socket 操作的超时时间:

 ServerSocket.accept();
 SocketInputStream.read();
 DatagramSocket.receive();

必须在进入阻塞操作之前设置该选项才能生效。 如果超时到期并且操作将继续阻塞,则会引发 java.io.InterruptedIOException。 在这种情况下,Socket 没有关闭。

适用于所有套接字:SocketImpl、DatagramSocketImpl

TCP_NODELAY

static final int TCP_NODELAY

禁用此连接的 Nagle 算法。 写入网络的数据不会缓冲等待对先前写入数据的确认。

仅对 TCP 有效:SocketImpl。

方法详情

setOption

void setOption(int optID, Object value) throws SocketException

启用/禁用 optID 指定的选项。 如果要启用该选项,并且它需要一个特定于选项的“值”,则将其传入值。 值的实际类型是特定于选项的,传递不属于预期类型的内容是错误的:

 SocketImpl s;
 ...
 s.setOption(SO_LINGER, new Integer(10));
    // OK - set SO_LINGER w/ timeout of 10 sec.
 s.setOption(SO_LINGER, new Double(10));
    // ERROR - expects java.lang.Integer

如果请求的选项是二进制的,则可以通过 java.lang.Boolean 使用此方法设置:

 s.setOption(TCP_NODELAY, new Boolean(true));
    // OK - enables TCP_NODELAY, a binary option

任何选项都可以使用此方法和布尔值(false)禁用:

 s.setOption(TCP_NODELAY, new Boolean(false));
    // OK - disables TCP_NODELAY
 s.setOption(SO_LINGER, new Boolean(false));
    // OK - disables SO_LINGER

对于具有 on 和 off 概念并且需要非布尔参数的选项,将其值设置为 Boolean(false) 以外的任何值都会隐式启用它。 如果选项无法识别、套接字已关闭或发生一些低级错误,则抛出 SocketException

参数:

参数名称参数描述
optID标识选项
value套接字选项的参数

Throws:

Throw名称Throw描述
SocketException如果该选项无法识别,则套接字已关闭,或者发生了一些低级错误

getOption

Object getOption(int optID) throws SocketException

获取选项的值。 如果启用,二进制选项将返回 java.lang.Boolean(true),如果禁用,则返回 java.lang.Boolean(false),例如:

 SocketImpl s;
 ...
 Boolean noDelay = (Boolean)(s.getOption(TCP_NODELAY));
 if (noDelay.booleanValue()) {
     // true if TCP_NODELAY is enabled...
 ...
 }

对于将特定类型作为参数的选项,getOption(int) 将返回参数的值,否则将返回 java.lang.Boolean(false):

 Object o = s.getOption(SO_LINGER);
 if (o instanceof Integer) {
     System.out.print("Linger time is " + ((Integer)o).intValue());
 } else {
   // the true type of o is java.lang.Boolean(false);
 }

参数:

参数名称参数描述
optID一个 int 标识要获取的选项

返回:

option的值

Throws:

Throw名称Throw描述
SocketException如果套接字关闭
SocketException如果 optID 在协议栈中是未知的(包括 SocketImpl)

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/168835.html<

(0)
管理的头像管理
上一篇2025-03-21 15:58
下一篇 2025-03-21 16:00

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注