树叶云鸿蒙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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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