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表达高带宽的相对重要性
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.