- java.lang.Object
-
- java.net.DatagramSocket
-
- 实现的所有接口
-
Closeable
,AutoCloseable
- 已知直接子类:
-
MulticastSocket
public class DatagramSocket extends Object implements Closeable
此类表示用于发送和接收数据报包的套接字。数据报套接字是分组传送服务的发送或接收点。 在数据报套接字上发送或接收的每个数据包都是单独寻址和路由的。 从一台机器发送到另一台机器的多个分组可以被不同地路由,并且可以以任何顺序到达。
在可能的情况下,新构建的
DatagramSocket
启用了SO_BROADCAST
套接字选项,以允许传输广播数据报。 为了接收广播数据包,应将DatagramSocket绑定到通配符地址。 在一些实现中,当DatagramSocket绑定到更具体的地址时,也可以接收广播分组。示例:
DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));
相当于:DatagramSocket s = new DatagramSocket(8888);
这两种情况都将创建一个能够在UDP端口8888上接收广播的DatagramSocket。- 从以下版本开始:
- 1.0
- 另请参见:
-
DatagramPacket
,DatagramChannel
-
-
构造方法摘要
构造方法 变量 构造器 描述 DatagramSocket()
构造一个数据报套接字并将其绑定到本地主机上的任何可用端口。DatagramSocket(int port)
构造一个数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket(int port, InetAddress laddr)
创建绑定到指定本地地址的数据报套接字。protected
DatagramSocket(DatagramSocketImpl impl)
使用指定的DatagramSocketImpl创建未绑定的数据报套接字。DatagramSocket(SocketAddress bindaddr)
创建绑定到指定本地套接字地址的数据报套接字。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 void
bind(SocketAddress addr)
将此DatagramSocket绑定到特定的地址和端口。void
close()
关闭此数据报套接字。void
connect(InetAddress address, int port)
将套接字连接到此套接字的远程地址。void
connect(SocketAddress addr)
将此套接字连接到远程套接字地址(IP地址+端口号)。void
disconnect()
断开插座。boolean
getBroadcast()
测试是否启用了SO_BROADCAST。DatagramChannel
getChannel()
返回与此数据报套接字关联的唯一DatagramChannel
对象(如果有)。InetAddress
getInetAddress()
返回此套接字连接的地址。InetAddress
getLocalAddress()
获取套接字绑定的本地地址。int
getLocalPort()
返回此套接字绑定到的本地主机上的端口号。SocketAddress
getLocalSocketAddress()
返回此套接字绑定的端点的地址。<T> T
getOption(SocketOption<T> name)
返回套接字选项的值。int
getPort()
返回此套接字连接的端口号。int
getReceiveBufferSize()
获取此DatagramSocket
的SO_RCVBUF选项的值,即该平台在此DatagramSocket
上用于输入的缓冲区大小。SocketAddress
getRemoteSocketAddress()
返回此套接字连接到的端点的地址,如果未连接则返回null
。boolean
getReuseAddress()
测试是否启用了SO_REUSEADDR。int
getSendBufferSize()
获取此DatagramSocket
的SO_SNDBUF选项的值,该平台用于此DatagramSocket
上的输出的缓冲区大小。int
getSoTimeout()
检索SO_TIMEOUT的设置。 0返回意味着该选项被禁用(即无穷大的超时)。int
getTrafficClass()
获取从此DatagramSocket发送的数据包的IP数据报头中的流量类或服务类型。boolean
isBound()
返回套接字的绑定状态。boolean
isClosed()
返回套接字是否关闭。boolean
isConnected()
返回套接字的连接状态。void
receive(DatagramPacket p)
从此套接字接收数据报包。void
send(DatagramPacket p)
从此套接字发送数据报包。void
setBroadcast(boolean on)
启用/禁用SO_BROADCAST。static void
setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
设置应用程序的数据报套接字实现工厂。<T> DatagramSocket
setOption(SocketOption<T> name, T value)
设置套接字选项的值。void
setReceiveBufferSize(int size)
将SO_RCVBUF选项设置为此DatagramSocket
的指定值。void
setReuseAddress(boolean on)
启用/禁用SO_REUSEADDR套接字选项。void
setSendBufferSize(int size)
将SO_SNDBUF选项设置为此DatagramSocket
的指定值。void
setSoTimeout(int timeout)
使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。void
setTrafficClass(int tc)
在IP数据报头中为从此DatagramSocket发送的数据报设置流量类或服务类型八位字节。Set<SocketOption<?>>
supportedOptions()
返回此套接字支持的一组套接字选项。
-
-
-
构造方法详细信息
-
DatagramSocket
public DatagramSocket() throws SocketException
构造一个数据报套接字并将其绑定到本地主机上的任何可用端口。 套接字将绑定到wildcard
地址,即内核选择的IP地址。如果有安全管理器,则首先调用其
checkListen
方法,并将0作为其参数,以确保允许该操作。 这可能会导致SecurityException。- 异常
-
SocketException
- 如果无法打开套接字,或者套接字无法绑定到指定的本地端口。 -
SecurityException
- 如果存在安全管理器且其checkListen
方法不允许该操作。 - 另请参见:
-
SecurityManager.checkListen(int)
-
DatagramSocket
protected DatagramSocket(DatagramSocketImpl impl)
使用指定的DatagramSocketImpl创建未绑定的数据报套接字。- 参数
-
impl
-一个 的DatagramSocketImpl的子类希望在DatagramSocket的使用的一个实例。 - 从以下版本开始:
- 1.4
-
DatagramSocket
public DatagramSocket(SocketAddress bindaddr) throws SocketException
创建绑定到指定本地套接字地址的数据报套接字。如果地址为
null
,则创建一个未绑定的套接字。如果有安全管理器,则首先使用套接字地址中的端口作为其参数调用其
checkListen
方法,以确保允许操作。 这可能会导致SecurityException。- 参数
-
bindaddr
- 要绑定的本地套接字地址,或null
用于未绑定的套接字。 - 异常
-
SocketException
- 如果无法打开套接字,或者套接字无法绑定到指定的本地端口。 -
SecurityException
- 如果存在安全管理器且其checkListen
方法不允许该操作。 - 从以下版本开始:
- 1.4
- 另请参见:
-
SecurityManager.checkListen(int)
-
DatagramSocket
public DatagramSocket(int port) throws SocketException
构造一个数据报套接字并将其绑定到本地主机上的指定端口。 套接字将绑定到wildcard
地址,该地址是内核选择的IP地址。如果存在安全管理器,则首先使用
port
参数作为其参数调用其checkListen
方法,以确保允许操作。 这可能会导致SecurityException。- 参数
-
port
- 要使用的端口。 - 异常
-
SocketException
- 如果无法打开套接字,或者套接字无法绑定到指定的本地端口。 -
SecurityException
- 如果存在安全管理器且其checkListen
方法不允许该操作。 - 另请参见:
-
SecurityManager.checkListen(int)
-
DatagramSocket
public DatagramSocket(int port, InetAddress laddr) throws SocketException
创建绑定到指定本地地址的数据报套接字。 本地端口必须介于0和65535之间。 如果IP地址为0.0.0.0,则套接字将绑定到wildcard
地址,即内核选择的IP地址。如果存在安全管理器,则首先使用
port
参数作为其参数调用其checkListen
方法,以确保允许操作。 这可能会导致SecurityException。- 参数
-
port
- 要使用的本地端口 -
laddr
- 要绑定的本地地址 - 异常
-
SocketException
- 如果无法打开套接字,或者套接字无法绑定到指定的本地端口。 -
SecurityException
- 如果存在安全管理器且其checkListen
方法不允许该操作。 - 从以下版本开始:
- 1.1
- 另请参见:
-
SecurityManager.checkListen(int)
-
-
方法详细信息
-
bind
public void bind(SocketAddress addr) throws SocketException
将此DatagramSocket绑定到特定的地址和端口。如果地址是
null
,则系统将获取临时端口和有效的本地地址以绑定套接字。- 参数
-
addr
- 要绑定的地址和端口。 - 异常
-
SocketException
- 如果在绑定期间发生任何错误,或者套接字已绑定。 -
SecurityException
- 如果存在安全管理器且其checkListen
方法不允许该操作。 -
IllegalArgumentException
- 如果addr是此套接字不支持的SocketAddress子类。 - 从以下版本开始:
- 1.4
-
connect
public void connect(InetAddress address, int port)
将套接字连接到此套接字的远程地址。 当套接字连接到远程地址时,只能将数据包发送到该地址或从该地址接收数据包。 默认情况下,未连接数据报套接字。如果套接字所连接的远程目标不存在,或者无法访问,并且如果已收到该地址的ICMP目标不可达数据包,则后续调用发送或接收可能会抛出PortUnreachableException。 注意,不保证会抛出异常。
如果已安装安全管理器,则调用它以检查对远程地址的访问。 具体来说,如果给定的
address
是multicast address
,则使用给定的address
调用安全管理器的checkMulticast
方法。 否则,将使用给定的address
和port
调用安全管理器的checkConnect
和checkAccept
方法,以验证是否允许分别发送和接收数据报。连接套接字时,
receive
和send
不会对传入和传出的数据包执行任何安全检查 ,除了匹配数据包和套接字的地址和端口。 在发送操作中,如果数据包的地址已设置且数据包的地址与套接字地址不匹配,则将引发IllegalArgumentException
。 连接到多播地址的套接字只能用于发送数据包。- 参数
-
address
- 套接字的远程地址 -
port
- 套接字的远程端口。 - 异常
-
IllegalArgumentException
- 如果地址为空,或者端口超出范围。 -
SecurityException
- 如果已安装安全管理器且不允许访问给定的远程地址 - 另请参见:
-
disconnect()
-
connect
public void connect(SocketAddress addr) throws SocketException
将此套接字连接到远程套接字地址(IP地址+端口号)。如果给定
InetSocketAddress
,则此方法的行为就像使用给定的套接字地址IP地址和端口号调用connect(InetAddress,int)
一样。- 参数
-
addr
- 远程地址。 - 异常
-
SocketException
- 如果连接失败 -
IllegalArgumentException
- 如果addr
是null
,或者addr
是此套接字不支持的SocketAddress子类 -
SecurityException
- 如果已安装安全管理器且不允许访问给定的远程地址 - 从以下版本开始:
- 1.4
-
disconnect
public void disconnect()
断开插座。 如果套接字已关闭或未连接,则此方法无效。
-
isBound
public boolean isBound()
- 结果
- 如果套接字成功绑定到某个地址,则为true
- 从以下版本开始:
- 1.4
-
isConnected
public boolean isConnected()
返回套接字的连接状态。如果套接字在
closed
之前已连接,则此方法将在套接字关闭后继续返回true
。- 结果
- 如果套接字成功连接到服务器,则为true
- 从以下版本开始:
- 1.4
-
getInetAddress
public InetAddress getInetAddress()
- 结果
- 此套接字连接的地址。
-
getPort
public int getPort()
- 结果
- 此套接字连接的端口号。
-
getRemoteSocketAddress
public SocketAddress getRemoteSocketAddress()
返回此套接字连接到的端点的地址,如果未连接,则null
。如果套接字在
closed
之前已连接,则此方法将在套接字关闭后继续返回连接的地址。- 结果
-
SocketAddress
表示此套接字的远程端点,如果尚未连接,null
。 - 从以下版本开始:
- 1.4
- 另请参见:
-
getInetAddress()
,getPort()
,connect(SocketAddress)
-
getLocalSocketAddress
public SocketAddress getLocalSocketAddress()
返回此套接字绑定的端点的地址。- 结果
-
SocketAddress
表示此套接字的本地端点,如果它已关闭或尚未绑定,null
。 - 从以下版本开始:
- 1.4
- 另请参见:
-
getLocalAddress()
,getLocalPort()
,bind(SocketAddress)
-
send
public void send(DatagramPacket p) throws IOException
从此套接字发送数据报包。DatagramPacket
包括指示要发送的数据,其长度,远程主机的IP地址以及远程主机上的端口号的信息。如果存在安全管理器,并且套接字当前未连接到远程地址,则此方法首先执行一些安全检查。 首先,如果
p.getAddress().isMulticastAddress()
为true,则此方法将p.getAddress()
作为参数调用安全管理器的checkMulticast
方法。 如果对该表达式的求值为false,则此方法将使用参数p.getAddress().getHostAddress()
和p.getPort()
调用安全管理器的checkConnect
方法。 如果不允许操作,则每次调用安全管理器方法都可能导致SecurityException。- 参数
-
p
- 要发送的DatagramPacket
。 - 异常
-
IOException
- 如果发生I / O错误。 -
SecurityException
- 如果存在安全管理器且其checkMulticast
或checkConnect
方法不允许发送。 -
PortUnreachableException
- 如果套接字连接到当前无法访问的目标,则可能抛出此异常。 注意,不保证会抛出异常。 -
IllegalBlockingModeException
- 如果此套接字具有关联的通道,并且通道处于非阻塞模式。 -
IllegalArgumentException
- 如果套接字已连接,并且连接的地址和数据包地址不同。 - 另请参见:
-
DatagramPacket
,SecurityManager.checkMulticast(InetAddress)
,SecurityManager.checkConnect(java.lang.String, int)
-
receive
public void receive(DatagramPacket p) throws IOException
从此套接字接收数据报包。 当此方法返回时,DatagramPacket
的缓冲区将填充接收的数据。 数据报包还包含发送方的IP地址和发送方机器上的端口号。此方法将阻塞,直到收到数据报。 数据报包对象的
length
字段包含接收消息的长度。 如果消息长于数据包的长度,则消息将被截断。如果存在安全管理器,则如果安全管理器
checkAccept
方法不允许,则无法接收数据包。- 参数
-
p
- 将传入数据放入其中的DatagramPacket
。 - 异常
-
IOException
- 如果发生I / O错误。 -
SocketTimeoutException
- 如果先前已调用setSoTimeout且超时已到期。 -
PortUnreachableException
- 如果套接字连接到当前无法访问的目标,则可能抛出此异常。 注意,不保证会抛出异常。 -
IllegalBlockingModeException
- 如果此套接字具有关联的通道,并且通道处于非阻塞模式。 - 另请参见:
-
DatagramPacket
,DatagramSocket
-
getLocalAddress
public InetAddress getLocalAddress()
获取套接字绑定的本地地址。如果有安全管理器,则首先使用主机地址调用其
checkConnect
方法,并将-1
作为其参数,以查看是否允许该操作。- 结果
-
本地地址到套接字绑定,
null
如果套接字被关闭,或InetAddress
表示wildcard
个地址如果任一插座不结合,或安全管理器checkConnect
方法不允许该操作 - 从以下版本开始:
- 1.1
- 另请参见:
-
SecurityManager.checkConnect(java.lang.String, int)
-
getLocalPort
public int getLocalPort()
返回此套接字绑定到的本地主机上的端口号。- 结果
-
此套接字绑定到的本地主机上的端口号,如果套接字已关闭,
0
如果尚未绑定,-1
。
-
setSoTimeout
public void setSoTimeout(int timeout) throws SocketException
使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。 如果将此选项设置为非零超时,则对此DatagramSocket的receive()调用将仅阻止这段时间。 如果超时到期,则引发java.net.SocketTimeoutException ,尽管DatagramSocket仍然有效。 必须在进入阻止操作之前启用该选项才能生效。 超时时间必须为> 0
。 超时为零被解释为无限超时。- 参数
-
timeout
- 指定的超时(以毫秒为单位)。 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 从以下版本开始:
- 1.1
- 另请参见:
-
getSoTimeout()
-
getSoTimeout
public int getSoTimeout() throws SocketException
检索SO_TIMEOUT的设置。 0返回意味着该选项被禁用(即无穷大的超时)。- 结果
- SO_TIMEOUT的设置
- 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 从以下版本开始:
- 1.1
- 另请参见:
-
setSoTimeout(int)
-
setSendBufferSize
public void setSendBufferSize(int size) throws SocketException
将SO_SNDBUF选项设置为此DatagramSocket
的指定值。 网络实现使用SO_SNDBUF选项作为调整底层网络I / O缓冲区大小的提示。 SO_SNDBUF设置也可以由网络实现用于确定可以在该套接字上发送的分组的最大大小。由于SO_SNDBUF是一个提示,想要验证缓冲区大小的应用程序应该调用
getSendBufferSize()
。当发送速率高时,增加缓冲区大小可允许网络实现将多个输出分组排队。
注意:如果使用
send(DatagramPacket)
发送大于SO_SNDBUF设置的DatagramPacket
,则在发送或丢弃数据包时它是特定于实现的。- 参数
-
size
- 设置发送缓冲区大小的大小。 该值必须大于0。 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 -
IllegalArgumentException
- 如果值为0或为负数。 - 另请参见:
-
getSendBufferSize()
-
getSendBufferSize
public int getSendBufferSize() throws SocketException
获取此DatagramSocket
的SO_SNDBUF选项的值,即该平台在此DatagramSocket
上用于输出的缓冲区大小。- 结果
-
此
DatagramSocket
的SO_SNDBUF选项的值 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 另请参见:
-
setSendBufferSize(int)
-
setReceiveBufferSize
public void setReceiveBufferSize(int size) throws SocketException
将SO_RCVBUF选项设置为此DatagramSocket
的指定值。 网络实现使用SO_RCVBUF选项作为调整底层网络I / O缓冲区大小的提示。 SO_RCVBUF设置也可以由网络实现用于确定可以在该套接字上接收的分组的最大大小。因为SO_RCVBUF是一个提示,想要验证缓冲区设置大小的应用程序应该调用
getReceiveBufferSize()
。增加SO_RCVBUF可以允许网络实现在数据包到达速度快于使用
receive(DatagramPacket)
接收时缓冲多个数据包。注意:如果可以接收大于SO_RCVBUF的数据包,则它是特定于实现的。
- 参数
-
size
- 设置接收缓冲区大小的大小。 该值必须大于0。 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 -
IllegalArgumentException
- 如果值为0或为负数。 - 另请参见:
-
getReceiveBufferSize()
-
getReceiveBufferSize
public int getReceiveBufferSize() throws SocketException
获取此DatagramSocket
的SO_RCVBUF选项的值,该平台用于此DatagramSocket
上的输入的缓冲区大小。- 结果
-
此
DatagramSocket
的SO_RCVBUF选项的值 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 另请参见:
-
setReceiveBufferSize(int)
-
setReuseAddress
public void setReuseAddress(boolean on) throws SocketException
启用/禁用SO_REUSEADDR套接字选项。对于UDP套接字,可能需要将多个套接字绑定到同一套接字地址。 这通常用于接收多播数据包(参见
MulticastSocket
)。 如果在使用bind(SocketAddress)
绑定套接字之前启用了SO_REUSEADDR
套接字选项,则SO_REUSEADDR
套接字选项允许将多个套接字绑定到同一套接字地址。注意:所有现有平台都不支持此功能,因此无论是否忽略此选项,都是特定于实现的。 但是,如果不支持,则
getReuseAddress()
将始终返回false
。当
DatagramSocket
被创建的初始设定SO_REUSEADDR
被禁用。SO_REUSEADDR
绑定套接字后启用或禁用SO_REUSEADDR
时的行为(请参阅isBound()
)。- 参数
-
on
- 是否启用或禁用 - 异常
-
SocketException
- 如果在启用或禁用SO_RESUEADDR
套接字选项时发生错误,或者套接字已关闭。 - 从以下版本开始:
- 1.4
- 另请参见:
-
getReuseAddress()
,bind(SocketAddress)
,isBound()
,isClosed()
-
getReuseAddress
public boolean getReuseAddress() throws SocketException
测试是否启用了SO_REUSEADDR。- 结果
-
a
boolean
指示是否已启用SO_REUSEADDR。 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
setReuseAddress(boolean)
-
setBroadcast
public void setBroadcast(boolean on) throws SocketException
启用/禁用SO_BROADCAST。某些操作系统可能要求使用特定于实现的特权启动Java虚拟机以启用此选项或发送广播数据报。
- 参数
-
on
- 是否开启广播。 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
getBroadcast()
-
getBroadcast
public boolean getBroadcast() throws SocketException
测试是否启用了SO_BROADCAST。- 结果
-
a
boolean
指示是否启用了SO_BROADCAST。 - 异常
-
SocketException
- 如果底层协议中存在错误,例如UDP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
setBroadcast(boolean)
-
setTrafficClass
public void setTrafficClass(int tc) throws SocketException
在IP数据报头中为从此DatagramSocket发送的数据报设置流量类或服务类型八位字节。 由于底层网络实现可能会忽略此值,因此应用程序应将其视为提示。tc 必须在
0 <= tc <= 255
范围内,0 <= tc <= 255
将抛出IllegalArgumentException。笔记:
对于Internet协议v4,该值由
integer
组成,其中最低有效8位表示套接字发送的IP数据包中TOS八位字节的值。 RFC 1349定义TOS值如下:-
IPTOS_LOWCOST (0x02)
-
IPTOS_RELIABILITY (0x04)
-
IPTOS_THROUGHPUT (0x08)
-
IPTOS_LOWDELAY (0x10)
在优先级字段中设置位可能会导致SocketException指示不允许该操作。
对于Internet协议v6
tc
是将放入IP标头的sin6_flowinfo字段的值。- 参数
-
tc
- bitset的值为int
。 - 异常
-
SocketException
- 如果设置流量类别或服务类型时出错 - 从以下版本开始:
- 1.4
- 另请参见:
-
getTrafficClass()
-
-
getTrafficClass
public int getTrafficClass() throws SocketException
获取从此DatagramSocket发送的数据包的IP数据报头中的流量类或服务类型。由于底层网络实现可能会忽略使用
setTrafficClass(int)
的流量类或服务类型集, 因此此方法可能返回与先前在此DatagramSocket上使用setTrafficClass(int)
方法设置的值不同的值。- 结果
- 已设置的流量类别或服务类型
- 异常
-
SocketException
- 如果获取流量类或服务类型值时出错。 - 从以下版本开始:
- 1.4
- 另请参见:
-
setTrafficClass(int)
-
close
public void close()
关闭此数据报套接字。此套接字上当前在
receive(java.net.DatagramPacket)
中被阻止的任何线程将抛出SocketException
。如果此套接字具有关联的通道,则通道也将关闭。
- Specified by:
-
close
在界面AutoCloseable
- Specified by:
-
close
,界面Closeable
-
isClosed
public boolean isClosed()
返回套接字是否关闭。- 结果
- 如果套接字已关闭,则为true
- 从以下版本开始:
- 1.4
-
getChannel
public DatagramChannel getChannel()
返回与此数据报套接字关联的唯一DatagramChannel
对象(如果有)。当且仅当通道本身是通过
DatagramChannel.open
方法创建时,数据报套接字才会有通道。- 结果
-
与此数据报套接字关联的数据报通道,如果未为通道创建此套接字,
null
- 从以下版本开始:
- 1.4
-
setDatagramSocketImplFactory
public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
设置应用程序的数据报套接字实现工厂。 工厂只能指定一次。当应用程序创建新的数据报套接字时,将调用套接字实现工厂的
createDatagramSocketImpl
方法来创建实际的数据报套接字实现。除非工厂已经设置,否则将
null
传递给该方法是无操作的。如果存在安全管理器,则此方法首先调用安全管理器的
checkSetFactory
方法以确保允许操作。 这可能会导致SecurityException。- 参数
-
fac
- 所需的工厂。 - 异常
-
IOException
- 如果在设置数据报套接字工厂时发生I / O错误。 -
SocketException
- 如果已定义工厂。 -
SecurityException
- 如果存在安全管理器且其checkSetFactory
方法不允许该操作。 - 从以下版本开始:
- 1.3
- 另请参见:
-
DatagramSocketImplFactory.createDatagramSocketImpl()
,SecurityManager.checkSetFactory()
-
setOption
public <T> DatagramSocket setOption(SocketOption<T> name, T value) throws IOException
设置套接字选项的值。- 参数类型
-
T
- 套接字选项值的类型 - 参数
-
name
- 套接字选项 -
value
- 套接字选项的值。 值null
可能对某些选项有效。 - 结果
- 这个DatagramSocket
- 异常
-
UnsupportedOperationException
- 如果数据报套接字不支持该选项。 -
IllegalArgumentException
- 如果该值对该选项无效。 -
IOException
- 如果发生I / O错误,或者套接字已关闭。 -
SecurityException
- 如果设置了安全管理器,并且套接字选项需要安全权限,并且调用者没有所需的权限。StandardSocketOptions
不需要任何安全权限。 -
NullPointerException
- 如果名称是null
- 从以下版本开始:
- 9
-
getOption
public <T> T getOption(SocketOption<T> name) throws IOException
返回套接字选项的值。- 参数类型
-
T
- 套接字选项值的类型 - 参数
-
name
- 套接字选项 - 结果
- 套接字选项的值。
- 异常
-
UnsupportedOperationException
- 如果数据报套接字不支持该选项。 -
IOException
- 如果发生I / O错误,或者套接字已关闭。 -
NullPointerException
- 如果名称是null
-
SecurityException
- 如果设置了安全管理器,并且套接字选项需要安全权限,并且调用者没有所需的权限。StandardSocketOptions
不需要任何安全权限。 - 从以下版本开始:
- 9
-
supportedOptions
public Set<SocketOption<?>> supportedOptions()
返回此套接字支持的一组套接字选项。 即使在套接字关闭后,此方法仍将继续返回选项集。- 结果
- 此套接字支持的一组套接字选项。 如果无法创建套接字的DatagramSocketImpl,则此set可能为空。
- 从以下版本开始:
- 9
-
-