- java.lang.Object
-
- java.net.DatagramSocket
-
- All Implemented Interfaces:
-
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);
这两种情况都将创建一个DatagramSocket能够在UDP端口8888上接收广播。- 从以下版本开始:
- 1.0
- 另请参见:
-
DatagramPacket
,DatagramChannel
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 DatagramSocket()
构造数据报套接字并将其绑定到本地主机上的任何可用端口。DatagramSocket(int port)
构造数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket(int port, InetAddress laddr)
创建一个数据报套接字,绑定到指定的本地地址。protected
DatagramSocket(DatagramSocketImpl impl)
使用指定的DatagramSocketImpl创建一个未绑定的数据报套接字。DatagramSocket(SocketAddress bindaddr)
创建一个数据报套接字,绑定到指定的本地套接字地址。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
在从该DatagramSocket发送的数据报的IP数据报头中设置流量类别或服务类型的八位字节。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
- 子类希望在DatagramSocket上使用的 DatagramSocketImpl的一个实例。 - 从以下版本开始:
- 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地址。如果有安全管理器,则首先调用其
checkListen
方法,其参数为port
,以确保操作是允许的。 这可能会导致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地址。如果有一个安全管理器,它的
checkListen
方法首先被调用,以port
参数作为参数,以确保操作是允许的。 这可能会导致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
,安全管理员的checkMulticast
方法将使用给定的address
调用。 否则,将使用给定的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()
返回套接字的绑定状态。如果套接字被绑定在
closed
之前,则该方法将在套接字关闭后继续返回true
。- 结果
- 如果套接字成功绑定到一个地址,则为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()
为真,则该方法调用安全管理器的checkMulticast
方法,其中参数为p.getAddress()
。 如果表达式的计算是错误的,这种方法改为调用安全管理器的checkConnect
方法与参数p.getAddress().getHostAddress()
和p.getPort()
。 每次调用安全管理器方法都可能导致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()
返回此套接字绑定到的本地主机上的端口号。- 结果
-
此套接字绑定的本地主机上的端口号,
-1
如果套接字被关闭,或者0
如果没有约束。
-
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
的行为(见isBound()
)未定义。- 参数
-
on
- 是否启用或禁用 - 异常
-
SocketException
- 如果在启用或禁用SO_RESUEADDR
套接字选项时发生错误,或者套接字已关闭。 - 从以下版本开始:
- 1.4
- 另请参见:
-
getReuseAddress()
,bind(SocketAddress)
,isBound()
,isClosed()
-
getReuseAddress
public boolean getReuseAddress() throws SocketException
测试是否启用了SO_REUSEADDR。- 结果
-
一个表示是否启用了SO_REUSEADDR的
boolean
。 - 异常
-
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。- 结果
-
一个表示
boolean
是否被使能的boolean。 - 异常
-
SocketException
- 如果底层协议有错误,例如UDP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
setBroadcast(boolean)
-
setTrafficClass
public void setTrafficClass(int tc) throws SocketException
在从该DatagramSocket发送的数据报的IP数据报头中设置流量类别或服务类型的八位字节。 由于底层网络实现可能会忽略此值,应用程序应该考虑一个提示。tc 必须在
0 <= tc <= 255
范围内,0 <= tc <= 255
将抛出IllegalArgumentException异常。笔记:
对于互联网协议v4,该值由
integer
组成,其最低有效8位表示由套接字发送的IP数据包中的TOS字节的值。 RFC 1349定义了TOS值如下:-
IPTOS_LOWCOST (0x02)
-
IPTOS_RELIABILITY (0x04)
-
IPTOS_THROUGHPUT (0x08)
-
IPTOS_LOWDELAY (0x10)
在优先级字段中设置位可能会导致SocketException表示不允许该操作。
对于互联网协议v6
tc
是将被放置到IP头的sin6_flowinfo字段中的值。- 参数
-
tc
- 一个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无法创建,则此集合可能为空。
- 从以下版本开始:
- 9
-
-