public class Socket extends Object implements Closeable
套接字的实际工作由SocketImpl
类的实例执行。 应用程序通过更改创建套接字实现的套接字工厂,可以配置自己创建适合本地防火墙的套接字。
setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketChannel
Modifier | Constructor and Description |
---|---|
|
Socket()
创建一个未连接的套接字,并使用系统默认类型的SocketImpl。
|
|
Socket(InetAddress address, int port)
创建流套接字并将其连接到指定IP地址的指定端口号。
|
|
Socket(InetAddress host, int port, boolean stream)
已弃用
使用DatagramSocket代替UDP传输。
|
|
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建套接字并将其连接到指定的远程端口上指定的远程地址。
|
|
Socket(Proxy proxy)
创建一个未连接的套接字,指定应该使用的代理类型(如果有的话),无论其他任何设置如何。
|
protected |
Socket(SocketImpl impl)
使用用户指定的SocketImpl创建一个未连接的Socket。
|
|
Socket(String host, int port)
创建流套接字并将其连接到指定主机上的指定端口号。
|
|
Socket(String host, int port, boolean stream)
已弃用
使用DatagramSocket代替UDP传输。
|
|
Socket(String host, int port, InetAddress localAddr, int localPort)
创建套接字并将其连接到指定远程端口上的指定远程主机。
|
Modifier and Type | Method and Description |
---|---|
void |
bind(SocketAddress bindpoint)
将套接字绑定到本地地址。
|
void |
close()
关闭此套接字。
|
void |
connect(SocketAddress endpoint)
将此套接字连接到服务器。
|
void |
connect(SocketAddress endpoint, int timeout)
将此套接字连接到具有指定超时值的服务器。
|
SocketChannel |
getChannel()
返回与此套接字相关联的唯一的 SocketChannel 对象(如果有)。
|
InetAddress |
getInetAddress()
返回套接字所连接的地址。
|
InputStream |
getInputStream()
返回此套接字的输入流。
|
boolean |
getKeepAlive()
测试是否启用了
SO_KEEPALIVE 。
|
InetAddress |
getLocalAddress()
获取套接字所绑定的本地地址。
|
int |
getLocalPort()
返回此套接字绑定到的本地端口号。
|
SocketAddress |
getLocalSocketAddress()
返回此套接字绑定到的端点的地址。
|
boolean |
getOOBInline()
测试是否启用了
SO_OOBINLINE 。
|
OutputStream |
getOutputStream()
返回此套接字的输出流。
|
int |
getPort()
返回此套接字连接到的远程端口号。
|
int |
getReceiveBufferSize()
|
SocketAddress |
getRemoteSocketAddress()
返回此套接字连接,或端点的地址
null 如果是未连接。
|
boolean |
getReuseAddress()
测试是否启用了
SO_REUSEADDR 。
|
int |
getSendBufferSize()
|
int |
getSoLinger()
SO_LINGER 的退货设置。
|
int |
getSoTimeout()
SO_TIMEOUT 的退货设置。
|
boolean |
getTcpNoDelay()
测试是否启用了
TCP_NODELAY 。
|
int |
getTrafficClass()
在从此Socket发送的数据包的IP头中获取流量类或服务类型
|
boolean |
isBound()
返回套接字的绑定状态。
|
boolean |
isClosed()
返回套接字的关闭状态。
|
boolean |
isConnected()
返回套接字的连接状态。
|
boolean |
isInputShutdown()
返回套接字连接的一半是否关闭。
|
boolean |
isOutputShutdown()
返回套接字连接的写半是否关闭。
|
void |
sendUrgentData(int data)
在套接字上发送一个字节的紧急数据。
|
void |
setKeepAlive(boolean on)
启用/禁用
SO_KEEPALIVE 。
|
void |
setOOBInline(boolean on)
启用/禁用
SO_OOBINLINE (接收TCP紧急数据)默认情况下,此选项被禁用,并且在套接字上接收的TCP紧急数据被静默地丢弃。
|
void |
setPerformancePreferences(int connectionTime, int latency, int bandwidth)
设置此套接字的性能首选项。
|
void |
setReceiveBufferSize(int size)
设置
SO_RCVBUF 选项为这个指定的值
Socket 。
|
void |
setReuseAddress(boolean on)
启用/禁用
SO_REUSEADDR 套接字选项。
|
void |
setSendBufferSize(int size)
设置
SO_SNDBUF 选项为这个指定的值
Socket 。
|
static void |
setSocketImplFactory(SocketImplFactory fac)
设置应用程序的客户端套接字实现工厂。
|
void |
setSoLinger(boolean on, int linger)
启用/禁用
SO_LINGER ,具有指定的逗留时间(以秒为单位)。
|
void |
setSoTimeout(int timeout)
启用/禁用
指定超时的
SO_TIMEOUT (以毫秒为单位)。
|
void |
setTcpNoDelay(boolean on)
启用/禁用
TCP_NODELAY (禁用/启用Nagle的算法)。
|
void |
setTrafficClass(int tc)
在从此Socket发送的数据包的IP头中设置流量类或服务类型字节。
|
void |
shutdownInput()
将此套接字的输入流放置在“流的末尾”。
|
void |
shutdownOutput()
禁用此套接字的输出流。
|
String |
toString()
将此套接字转换为
String 。
|
public Socket()
public Socket(Proxy proxy)
如果有安全管理器,则调用其checkConnect
方法,其代理主机地址和端口号作为其参数。 这可能会导致SecurityException。
例子:
Socket s = new Socket(Proxy.NO_PROXY);
将创建一个忽略任何其他代理配置的普通套接字。 Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));
将创建一个通过指定的SOCKS代理服务器连接的套接字。 proxy
- 一个Proxy
对象,指定应该使用什么样的代理。
IllegalArgumentException
- 如果代理是无效的类型或
null
。
SecurityException
- 如果存在安全管理员,并且拒绝连接到代理的权限。
ProxySelector
, Proxy
protected Socket(SocketImpl impl) throws SocketException
impl
- 子类希望在Socket上使用的
SocketImpl的一个实例。
SocketException
- 如果底层协议有错误,如TCP错误。
public Socket(String host, int port) throws UnknownHostException, IOException
如果指定的主机是null
,则相当于指定地址为InetAddress.getByName
(null)
。 换句话说,它相当于指定回送接口的地址。
如果应用程序指定了服务器套接字工厂,则调用该工厂的createSocketImpl
方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。
如果有一个安全管理器,它的checkConnect
方法被调用主机地址和port
作为参数。 这可能会导致SecurityException。
host
- 主机名,或
null
的环回地址。
port
- 端口号。
UnknownHostException
- 如果无法确定主机的IP地址。
IOException
- 如果在创建套接字时发生I / O错误。
SecurityException
- 如果安全管理器存在,并且其
checkConnect
方法不允许操作。
IllegalArgumentException
- 如果端口参数在超出指定范围的有效端口值(介于0和65535之间),包括0和65535之间。
setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
public Socket(InetAddress address, int port) throws IOException
如果应用程序指定了套接字工厂,则调用该工厂的createSocketImpl
方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。
如果有一个安全管理器,它的checkConnect
方法被调用与主机地址和port
作为其参数。 这可能会导致SecurityException。
address
- IP地址。
port
- 端口号。
IOException
- 如果在创建套接字时发生I / O错误。
SecurityException
- 如果安全管理器存在,并且其
checkConnect
方法不允许操作。
IllegalArgumentException
- 如果端口参数在有效端口值的指定范围之外(介于0和65535之间),包括0和65535之间。
NullPointerException
- 如果
address
为空。
setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
如果指定的主机是null
,则相当于指定地址为InetAddress.getByName
(null)
。 换句话说,它相当于指定回送接口的地址。
zero
本地端口号可以让系统在bind
操作中选择一个空闲端口。
如果有一个安全管理器,它的checkConnect
方法被调用主机地址和port
作为其参数。 这可能会导致SecurityException。
host
- 远程主机的名称,或环回地址的
null
。
port
- 远程端口
localAddr
- 套接字所绑定的本地地址,或
null
为
anyLocal
地址。
localPort
- 套接字绑定的本地端口,或
zero
用于系统选择的自由端口。
IOException
- 如果在创建套接字时发生I / O错误。
SecurityException
- 如果存在安全管理员,并且其
checkConnect
方法不允许连接到目标,或者其
checkListen
方法不允许绑定到本地端口。
IllegalArgumentException
- 如果端口参数或localPort参数超出了介于0和65535之间的有效端口值的指定范围(包括0和65535之间)。
SecurityManager.checkConnect(java.lang.String, int)
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
如果指定的本地地址是null
,则相当于将地址指定为AnyLocal地址(请参阅InetAddress.isAnyLocalAddress
()
)。
zero
本地端口号可以让系统在bind
操作中拿起一个空闲端口。
如果有一个安全管理器,它的checkConnect
方法被调用主机地址和port
作为其参数。 这可能会导致SecurityException。
address
- 远程地址
port
- 远程端口
localAddr
-本地地址的套接字绑定到,或
null
为
anyLocal
地址。
localPort
- 套接字绑定的本地端口或系统选择的自由端口的
zero
。
IOException
- 如果在创建套接字时发生I / O错误。
SecurityException
- 如果安全管理器存在,并且其
checkConnect
方法不允许连接到目标,或者其
checkListen
方法不允许绑定到本地端口。
IllegalArgumentException
- 如果端口参数或localPort参数超出了介于0和65535之间的有效端口值的指定范围(包括0和65535之间)。
NullPointerException
- 如果
address
为空。
SecurityManager.checkConnect(java.lang.String, int)
@Deprecated public Socket(String host, int port, boolean stream) throws IOException
如果指定的主机是null
,则相当于指定地址为InetAddress.getByName
(null)
。 换句话说,它相当于指定回送接口的地址。
如果流参数为true
, true
创建一个流套接字。 如果流参数是false
,它将创建一个数据报套接字。
如果应用程序指定了服务器套接字工厂,则调用该工厂的createSocketImpl
方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。
如果有一个安全管理器,它的checkConnect
方法被调用主机地址和port
作为其参数。 这可能会导致SecurityException。
如果使用UDP套接字,TCP / IP相关套接字选项将不适用。
host
- 主机名,或
null
的环回地址。
port
- 端口号。
stream
- 一个
boolean
这是流套接字还是数据报套接字的
boolean
。
IOException
- 如果在创建套接字时发生I / O错误。
SecurityException
- 如果安全管理器存在,并且其
checkConnect
方法不允许操作。
IllegalArgumentException
- 如果端口参数超出了有效端口值的指定范围(介于0和65535之间),包括0和65535之间。
setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
如果流参数为true
, true
创建一个流套接字。 如果流参数是false
,它将创建一个数据报套接字。
如果应用程序指定了服务器套接字工厂,则调用该工厂的createSocketImpl
方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。
如果有一个安全管理器,它的checkConnect
方法调用host.getHostAddress()
和port
作为参数。 这可能会导致SecurityException。
如果使用UDP套接字,TCP / IP相关套接字选项将不适用。
host
- IP地址。
port
- 端口号。
stream
- 如果true
,创建一个流套接字;
否则,创建一个数据报套接字。
IOException
- 如果在创建套接字时发生I / O错误。
SecurityException
- 如果安全管理器存在,并且其
checkConnect
方法不允许操作。
IllegalArgumentException
- 如果端口参数超出了在0到65535之间的有效端口值的指定范围(包括0和65535之间)。
NullPointerException
- 如果
host
为空。
setSocketImplFactory(java.net.SocketImplFactory)
, SocketImpl
, SocketImplFactory.createSocketImpl()
, SecurityManager.checkConnect(java.lang.String, int)
public void connect(SocketAddress endpoint) throws IOException
endpoint
-
SocketAddress
IOException
- 如果在连接期间发生错误
IllegalBlockingModeException
- 如果此套接字具有关联的通道,并且通道处于非阻塞模式
IllegalArgumentException
- 如果端点为空或是此套接字不支持的SocketAddress子类
public void connect(SocketAddress endpoint, int timeout) throws IOException
endpoint
-
SocketAddress
timeout
- 以
timeout
为单位的超时值。
IOException
- 如果在连接期间发生错误
SocketTimeoutException
- 如果超时连接前超时
IllegalBlockingModeException
- 如果此套接字具有关联的通道,并且通道处于非阻塞模式
IllegalArgumentException
- 如果端点为空或是此套接字不支持的SocketAddress子类
public void bind(SocketAddress bindpoint) throws IOException
如果地址为null
,则系统将接收短暂端口和有效的本地地址来绑定套接字。
bindpoint
- 要绑定的
SocketAddress
IOException
- 如果绑定操作失败,或者套接字已经绑定。
IllegalArgumentException
- 如果bindpoint是此套接字不支持的SocketAddress子类
SecurityException
- 如果安全管理器存在,并且其
checkListen
方法不允许绑定到本地端口。
isBound()
public InetAddress getInetAddress()
如果套接字之前连接closed
,则此方法将继续关闭套接字后返回连接的地址。
null
如果套接字未连接。
public InetAddress getLocalAddress()
如果有一个安全管理器集,它的checkConnect
方法被调用本地地址和-1
作为参数来查看是否允许该操作。 如果不允许操作,则返回loopback
地址。
SecurityManager.checkConnect(java.lang.String, int)
public int getPort()
如果套接字之前被连接closed
,则此方法将继续返回所连接的端口号关闭套接字之后。
public int getLocalPort()
如果套接字被绑定在closed
之前,则该方法将在套接字关闭后继续返回本地端口号。
public SocketAddress getRemoteSocketAddress()
null
如果是未连接。
如果套接字之前连接closed
,则此方法将继续关闭套接字后返回连接的地址。
SocketAddress
表示此套接字的远程端点,如果尚未连接,
null
null。
getInetAddress()
,
getPort()
,
connect(SocketAddress, int)
,
connect(SocketAddress)
public SocketAddress getLocalSocketAddress()
如果绑定到由InetSocketAddress
表示的端点的InetSocketAddress
是closed
,则该方法将在套接字关闭后继续返回InetSocketAddress
。 在这种情况下,返回的InetSocketAddress
的地址是wildcard
地址,其端口是绑定到的本地端口。
如果有一个安全管理器集,它的checkConnect
方法被调用本地地址和-1
作为参数来查看是否允许该操作。 如果不允许操作,则SocketAddress
一个表示loopback
地址的SocketAddress和该套接字所绑定的本地端口。
SocketAddress
此套接字的本地端点的
SocketAddress
,或者如果安全管理器被拒绝则表示该环回地址的
null
如果该套接字尚未绑定,
null
。
getLocalAddress()
,
getLocalPort()
,
bind(SocketAddress)
,
SecurityManager.checkConnect(java.lang.String, int)
public SocketChannel getChannel()
SocketChannel
对象(如果有)。
如果只有通道本身是通过SocketChannel.open
或ServerSocketChannel.accept
方法创建的,则套接字将具有通道。
null
public InputStream getInputStream() throws IOException
如果此套接字具有相关联的通道,则所得到的输入流将其所有操作委派给通道。 如果通道处于非阻塞模式,则输入流的read
操作将抛出IllegalBlockingModeException
。
在异常情况下,远程主机或网络软件可能会破坏底层连接(例如TCP连接情况下的连接重置)。 当网络软件检测到断开的连接时,以下内容适用于返回的输入流:
网络软件可以丢弃由套接字缓冲的字节。 不能被网络软件丢弃的字节可以使用read
来读取。
如果在套接字上没有字节缓冲,或者所有缓冲字节已被read
消耗,则所有后续调用read
将抛出IOException
。
关闭返回的InputStream
将关闭相关的套接字。
IOException
- 如果在创建输入流时发生I / O错误,则套接字关闭,插座未连接,或插座输入已使用
shutdownInput()
关闭
public OutputStream getOutputStream() throws IOException
如果此套接字具有相关联的通道,则生成的输出流将其所有操作委派给通道。 如果通道处于非阻塞模式,则输出流的write
操作将抛出IllegalBlockingModeException
。
关闭返回的OutputStream
将关闭相关的套接字。
IOException
- 如果在创建输出流时发生I / O错误或未连接套接字。
public void setTcpNoDelay(boolean on) throws SocketException
TCP_NODELAY
(禁用/启用Nagle的算法)。
on
-
true
启用TCP_NODELAY,
false
禁用。
SocketException
- 如果底层协议有错误,例如TCP错误。
getTcpNoDelay()
public boolean getTcpNoDelay() throws SocketException
TCP_NODELAY
。
boolean
是否启用
TCP_NODELAY
的boolean 。
SocketException
- 如果底层协议有错误,例如TCP错误。
setTcpNoDelay(boolean)
public void setSoLinger(boolean on, int linger) throws SocketException
on
- 是否
on
。
linger
- 如果是真的,要
linger
多久。
SocketException
- 如果底层协议有错误,如TCP错误。
IllegalArgumentException
- 如果滞留值为负数。
getSoLinger()
public int getSoLinger() throws SocketException
SO_LINGER
。
SocketException
- 如果底层协议有错误,如TCP错误。
setSoLinger(boolean, int)
public void sendUrgentData(int data) throws IOException
data
- 要发送的数据字节
IOException
- 发送数据是否有错误。
public void setOOBInline(boolean on) throws SocketException
SO_OOBINLINE
(接收TCP紧急数据)默认情况下,此选项被禁用,并且在套接字上接收的TCP紧急数据被静默地丢弃。
如果用户希望接收紧急数据,则必须启用此选项。
启用后,紧急数据将与正常数据一致。
注意,仅提供有限的支持来处理传入的紧急数据。 具体而言,不提供进入的紧急数据的通知,除非由较高级协议提供,否则不能区分正常数据和紧急数据。
on
-
true
,使
SO_OOBINLINE
,
false
禁用。
SocketException
- 如果底层协议有错误,如TCP错误。
getOOBInline()
public boolean getOOBInline() throws SocketException
SO_OOBINLINE
。
boolean
是否启用
SO_OOBINLINE
的boolean 。
SocketException
- 如果底层协议有错误,如TCP错误。
setOOBInline(boolean)
public void setSoTimeout(int timeout) throws SocketException
SO_TIMEOUT
(以毫秒为单位)。
使用此选项设置为非零超时时,与此Socket相关联的InputStream上的read()调用将仅阻止此时间。
如果超时超时,则引发java.net.SocketTimeoutException ,尽管Socket仍然有效。
必须先启用该选项才能进入阻止操作才能生效。
超时时间必须为> 0
。
超时为零被解释为无限超时。
timeout
- 指定的超时时间,以毫秒为单位。
SocketException
- 如果底层协议有错误,如TCP错误。
getSoTimeout()
public int getSoTimeout() throws SocketException
SO_TIMEOUT
的退货设置。
0返回意味着该选项被禁用(即无限超时)。
SO_TIMEOUT
SocketException
- 如果底层协议有错误,如TCP错误。
setSoTimeout(int)
public void setSendBufferSize(int size) throws SocketException
SO_SNDBUF
选项为这个指定的值Socket
。
平台的网络代码使用SO_SNDBUF
选项作为大小设置底层网络I / O缓冲区的提示。
因为SO_SNDBUF
是一个提示,想要确定缓冲区设置大小的应用程序应该调用getSendBufferSize()
。
size
- 设置发送缓冲区大小的大小。
该值必须大于0。
SocketException
- 如果底层协议有错误,如TCP错误。
IllegalArgumentException
- 如果值为0或为负。
getSendBufferSize()
public int getSendBufferSize() throws SocketException
SO_SNDBUF
选项此
Socket
。
SocketException
- 如果底层协议有错误,如TCP错误。
setSendBufferSize(int)
public void setReceiveBufferSize(int size) throws SocketException
SO_RCVBUF
选项为这个指定的值Socket
。
平台的网络代码使用SO_RCVBUF
选项作为大小设置底层网络I / O缓冲区的提示。
增加接收缓冲区大小可以提高大容量连接的网络I / O的性能,同时减少它可以帮助减少输入数据的积压。
因为SO_RCVBUF
是一个提示,想要验证缓冲区设置的大小的应用程序应该调用getReceiveBufferSize()
。
SO_RCVBUF
的值也用于设置向远程对等体发布的TCP接收窗口。 通常,可以随时连接一个套接字来修改窗口大小。 但是,如果接收窗口大于64K,则必须在套接字连接到远程对等体之前请求。 有两种情况需要注意:
ServerSocket.setReceiveBufferSize(int)
来完成。 size
- 设置接收缓冲区大小的大小。
该值必须大于0。
IllegalArgumentException
- 如果值为0或为负数。
SocketException
- 如果底层协议有错误,例如TCP错误。
getReceiveBufferSize()
,
ServerSocket.setReceiveBufferSize(int)
public int getReceiveBufferSize() throws SocketException
SO_RCVBUF
选项的价值为
Socket
。
SocketException
- 如果底层协议有错误,如TCP错误。
setReceiveBufferSize(int)
public void setKeepAlive(boolean on) throws SocketException
SO_KEEPALIVE
。
on
- 是否使套接字保持开启。
SocketException
- 如果底层协议有错误,如TCP错误。
getKeepAlive()
public boolean getKeepAlive() throws SocketException
SO_KEEPALIVE
。
boolean
是否启用
SO_KEEPALIVE
的boolean 。
SocketException
- 如果底层协议有错误,如TCP错误。
setKeepAlive(boolean)
public void setTrafficClass(int tc) throws SocketException
tc 必须在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表示不允许该操作。
根据RFC 1122第4.2.4.2节的规定,一个兼容的TCP实现应该是但不是必须的,让应用程序在连接的生存期内更改TOS字段。 因此,在建立TCP连接后是否可以更改服务类型字段是否取决于底层平台中的实现。 应用程序不应假设在连接后可以更改TOS字段。
对于Internet协议v6 tc
是将被放置到IP头的sin6_flowinfo字段中的值。
tc
- 一个
int
数值。
SocketException
- 如果在设置流量类或服务类型时出错
getTrafficClass()
,
SocketOptions.IP_TOS
public int getTrafficClass() throws SocketException
由于底层网络实现可能会忽略使用setTrafficClass(int)
的流量类别或服务类型,此方法可能会返回与先前使用此Socket上的setTrafficClass(int)
方法设置的值不同的值。
SocketException
- 获取流量类或服务类型值时是否有错误。
setTrafficClass(int)
,
SocketOptions.IP_TOS
public void setReuseAddress(boolean on) throws SocketException
SO_REUSEADDR
套接字选项。
当TCP连接关闭时,连接可能会在连接关闭后一段时间内保持在超时状态(通常称为TIME_WAIT
状态或2MSL
等待状态)。 对于使用众所周知的套接字地址或端口的应用SocketAddress
如果在涉及插座地址或端口的超时状态中存在连接,则可能无法将套接字绑定到所需的SocketAddress
。
启用SO_REUSEADDR
之前结合使用套接字bind(SocketAddress)
允许在上一个连接处于超时状态时绑定套接字。
当创建Socket
时,初始设置为SO_REUSEADDR
将被禁用。
套接字绑定后启用或禁用SO_REUSEADDR
时的行为(见isBound()
)未定义。
on
- 是否启用或禁用套接字选项
SocketException
- 如果出现错误,启用或禁用
SO_REUSEADDR
套接字选项,或者套接字关闭。
getReuseAddress()
,
bind(SocketAddress)
,
isClosed()
,
isBound()
public boolean getReuseAddress() throws SocketException
SO_REUSEADDR
。
boolean
是否启用
SO_REUSEADDR
的boolean 。
SocketException
- 如果底层协议有错误,如TCP错误。
setReuseAddress(boolean)
public void close() throws IOException
任何线程当前被阻塞在这个套接字上的I / O操作将会抛出一个SocketException
。
一旦一个套接字被关闭,它不可用于进一步的网络使用(即不能重新连接或反弹)。 需要创建一个新的套接字。
关闭此插座也将关闭插座的InputStream
和OutputStream
。
如果此套接字具有关联的通道,则通道也将关闭。
close
中的
Closeable
close
中的
AutoCloseable
IOException
- 如果在关闭此套接字时发生I / O错误。
isClosed()
public void shutdownInput() throws IOException
如果您在套接字上调用此方法后从套接字输入流读取,则流的available
方法将返回0,其read
方法将返回-1
(流结束)。
IOException
- 如果在关闭此套接字时发生I / O错误。
shutdownOutput()
,
close()
,
setSoLinger(boolean, int)
,
isInputShutdown()
public void shutdownOutput() throws IOException
IOException
- 如果在关闭此套接字时发生I / O错误。
shutdownInput()
,
close()
,
setSoLinger(boolean, int)
,
isOutputShutdown()
public boolean isConnected()
注意:关闭套接字不会清除其连接状态,这意味着如果在关闭之前成功连接,此方法将返回true
的封闭套接字(请参阅isClosed()
)。
public boolean isBound()
注意:关闭套接字不会清除其绑定状态,这意味着如果在关闭之前成功绑定,此方法将返回true
的封闭套接字(请参阅isClosed()
)。
bind(java.net.SocketAddress)
public boolean isClosed()
close()
public boolean isInputShutdown()
shutdownInput()
public boolean isOutputShutdown()
shutdownOutput()
public static void setSocketImplFactory(SocketImplFactory fac) throws IOException
当应用程序创建一个新的客户端套接字时,将调用套接字实现工厂的createSocketImpl
方法来创建实际的套接字实现。
通过null
的方法是无操作,除非工厂已经设置。
如果有安全管理员,则该方法首先调用安全管理器的checkSetFactory
方法,以确保允许操作。 这可能会导致SecurityException。
fac
- 所需工厂。
IOException
- 如果在设置插座工厂时发生I / O错误。
SocketException
- 如果工厂已经定义。
SecurityException
- 如果存在安全管理员,并且其
checkSetFactory
方法不允许操作。
SocketImplFactory.createSocketImpl()
,
SecurityManager.checkSetFactory()
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
套接字默认使用TCP / IP协议。 一些实现可以提供具有与TCP / IP不同的性能特征的替代协议。 该方法允许应用程序表达自己的偏好,以便在实现从可用协议中选择时应如何进行这些权衡。
性能偏好由三个整数描述,其值表示短连接时间,低延迟和高带宽的相对重要性。 整数的绝对值是无关紧要的; 为了选择协议,简单地比较值,较大的值表示较强的偏好。 负值表示比正值低的优先级。 例如,如果应用程序优先考虑低延迟和高带宽的短连接时间,则可以使用值(1, 0, 0)
调用此方法。 如果应用程序喜欢高于低延迟的高带宽,并且在短的连接时间之下的低延迟,则可以使用值(0, 1, 2)
调用该方法。
在此套接字连接后调用此方法将不起作用。
connectionTime
-一个
int
表达短连接时间的相对重要性
latency
-一个
int
表达低延迟的相对重要性
bandwidth
-一个
int
表达高带宽的相对重要性