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