- 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)创建一个数据报套接字,绑定到指定的本地地址。protectedDatagramSocket(DatagramSocketImpl impl)使用指定的DatagramSocketImpl创建一个未绑定的数据报套接字。DatagramSocket(SocketAddress bindaddr)创建一个数据报套接字,绑定到指定的本地套接字地址。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 voidbind(SocketAddress addr)将此DatagramSocket绑定到特定的地址和端口。voidclose()关闭此数据报套接字。voidconnect(InetAddress address, int port)将套接字连接到此套接字的远程地址。voidconnect(SocketAddress addr)将此套接字连接到远程套接字地址(IP地址+端口号)。voiddisconnect()断开插座。booleangetBroadcast()测试是否启用了SO_BROADCAST。DatagramChannelgetChannel()返回与该数据报套接字相关联的唯一的DatagramChannel对象(如果有)。InetAddressgetInetAddress()返回此套接字连接到的地址。InetAddressgetLocalAddress()获取套接字所绑定的本地地址。intgetLocalPort()返回此套接字绑定到的本地主机上的端口号。SocketAddressgetLocalSocketAddress()返回此套接字绑定到的端点的地址。<T> TgetOption(SocketOption<T> name)返回套接字选项的值。intgetPort()返回此套接字连接到的端口号。intgetReceiveBufferSize()获取此DatagramSocket的SO_RCVBUF选项的值,即该平台在此DatagramSocket上输入的缓冲区大小。SocketAddressgetRemoteSocketAddress()返回此套接字连接到的端点的地址,如果未连接,则null。booleangetReuseAddress()测试是否启用了SO_REUSEADDR。intgetSendBufferSize()获取此DatagramSocket的SO_SNDBUF选项的值,即平台在此DatagramSocket上输出使用的缓冲区大小。intgetSoTimeout()检索SO_TIMEOUT的设置。 0返回意味着该选项被禁用(即无限超时)。intgetTrafficClass()在从该DatagramSocket发送的数据包的IP数据报头中获取流量类或服务类型。booleanisBound()返回套接字的绑定状态。booleanisClosed()返回套接字是否关闭。booleanisConnected()返回套接字的连接状态。voidreceive(DatagramPacket p)从此套接字接收数据报包。voidsend(DatagramPacket p)从此套接字发送数据报包。voidsetBroadcast(boolean on)启用/禁用SO_BROADCAST。static voidsetDatagramSocketImplFactory(DatagramSocketImplFactory fac)设置应用程序的数据报套接字实现工厂。<T> DatagramSocketsetOption(SocketOption<T> name, T value)设置套接字选项的值。voidsetReceiveBufferSize(int size)将SO_RCVBUF选项设置为此DatagramSocket的指定值。voidsetReuseAddress(boolean on)启用/禁用SO_REUSEADDR套接字选项。voidsetSendBufferSize(int size)将SO_SNDBUF选项设置为此DatagramSocket的指定值。voidsetSoTimeout(int timeout)以指定的超时(以毫秒为单位)启用/禁用SO_TIMEOUT。voidsetTrafficClass(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
-
-