- java.lang.Object
-
- java.net.Socket
-
- 实现的所有接口
-
Closeable,AutoCloseable
- 已知直接子类:
-
SSLSocket
public class Socket extends Object implements Closeable
该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通信的端点。套接字的实际工作由
SocketImpl类的实例执行。 通过更改创建套接字实现的套接字工厂,应用程序可以将自身配置为创建适合本地防火墙的套接字。- 从以下版本开始:
- 1.0
- 另请参见:
-
setSocketImplFactory(java.net.SocketImplFactory),SocketImpl,SocketChannel
-
-
构造方法摘要
构造方法 变量 构造器 描述 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)创建一个未连接的套接字,指定应该使用的代理类型(如果有),而不管其他任何设置。protectedSocket(SocketImpl impl)使用用户指定的SocketImpl创建未连接的Socket。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 voidbind(SocketAddress bindpoint)将套接字绑定到本地地址。voidclose()关闭此套接字。voidconnect(SocketAddress endpoint)将此套接字连接到服务器。voidconnect(SocketAddress endpoint, int timeout)使用指定的超时值将此套接字连接到服务器。SocketChannelgetChannel()返回与此套接字关联的唯一SocketChannel对象(如果有)。InetAddressgetInetAddress()返回套接字连接的地址。InputStreamgetInputStream()返回此套接字的输入流。booleangetKeepAlive()测试是否启用了SO_KEEPALIVE。InetAddressgetLocalAddress()获取套接字绑定的本地地址。intgetLocalPort()返回此套接字绑定的本地端口号。SocketAddressgetLocalSocketAddress()返回此套接字绑定的端点的地址。booleangetOOBInline()测试是否启用了SO_OOBINLINE。<T> TgetOption(SocketOption<T> name)返回套接字选项的值。OutputStreamgetOutputStream()返回此套接字的输出流。intgetPort()返回此套接字连接的远程端口号。intgetReceiveBufferSize()SocketAddressgetRemoteSocketAddress()返回此套接字连接到的端点的地址,如果未连接则返回null。booleangetReuseAddress()测试是否启用了SO_REUSEADDR。intgetSendBufferSize()intgetSoLinger()返回SO_LINGER的设置。intgetSoTimeout()返回SO_TIMEOUT的设置。 0返回意味着该选项被禁用(即无穷大的超时)。booleangetTcpNoDelay()测试是否启用了TCP_NODELAY。intgetTrafficClass()获取从此Socket发送的数据包的IP头中的流量类或服务类型booleanisBound()返回套接字的绑定状态。booleanisClosed()返回套接字的关闭状态。booleanisConnected()返回套接字的连接状态。booleanisInputShutdown()返回套接字连接的读半部分是否已关闭。booleanisOutputShutdown()返回套接字连接的写半部分是否已关闭。voidsendUrgentData(int data)在套接字上发送一个字节的紧急数据。voidsetKeepAlive(boolean on)启用/禁用SO_KEEPALIVE。voidsetOOBInline(boolean on)启用/禁用SO_OOBINLINE(接收TCP紧急数据)默认情况下,此选项被禁用,并且套接字上收到的TCP紧急数据将被静默丢弃。<T> SocketsetOption(SocketOption<T> name, T value)设置套接字选项的值。voidsetPerformancePreferences(int connectionTime, int latency, int bandwidth)设置此套接字的性能首选项。voidsetReceiveBufferSize(int size)设置SO_RCVBUF选项,此规定值Socket。voidsetReuseAddress(boolean on)启用/禁用SO_REUSEADDR套接字选项。voidsetSendBufferSize(int size)设置SO_SNDBUF选项,此规定值Socket。static voidsetSocketImplFactory(SocketImplFactory fac)设置应用程序的客户端套接字实现工厂。voidsetSoLinger(boolean on, int linger)使用指定的延迟时间(以秒为单位)启用/禁用SO_LINGER。voidsetSoTimeout(int timeout)使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。voidsetTcpNoDelay(boolean on)启用/禁用TCP_NODELAY(禁用/启用Nagle的算法)。voidsetTrafficClass(int tc)为从此Socket发送的数据包的IP标头设置流量类或服务类型八位字节。voidshutdownInput()将此套接字的输入流放在“流结束”。voidshutdownOutput()禁用此套接字的输出流。Set<SocketOption<?>>supportedOptions()返回此套接字支持的一组套接字选项。StringtoString()将此套接字转换为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方法以创建实际的套接字实现。 否则会创建一个“普通”套接字。如果有安全管理器,则使用主机地址和
port作为其参数调用其checkConnect方法。 这可能会导致SecurityException。- 参数
-
host- 主机名,或环回地址的null。 -
port- 端口号。 - 异常
-
UnknownHostException- 如果无法确定主机的IP地址。 -
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理器且其checkConnect方法不允许该操作。 -
IllegalArgumentException- 如果port参数超出指定的有效端口值范围,则介于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方法以创建实际的套接字实现。 否则会创建一个“普通”套接字。如果有安全管理器,则使用主机地址和
port作为其参数调用其checkConnect方法。 这可能会导致SecurityException。- 参数
-
address- IP地址。 -
port- 端口号。 - 异常
-
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理器且其checkConnect方法不允许该操作。 -
IllegalArgumentException- 如果port参数超出指定的有效端口值范围,则介于0和65535之间(包括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操作中bind空闲端口。如果有安全管理器,则使用主机地址和
port作为其参数调用其checkConnect方法。 这可能会导致SecurityException。- 参数
-
host- 远程主机的名称,或环回地址的null。 -
port- 远程端口 -
localAddr- 套接字绑定的本地地址,或null为anyLocal地址。 -
localPort- 套接字绑定的本地端口,或zero用于系统选定的空闲端口。 - 异常
-
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理器且其checkConnect方法不允许连接到目标,或者其checkListen方法不允许绑定到本地端口。 -
IllegalArgumentException- 如果port参数或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操作中bind空闲端口。如果有安全管理器,则使用主机地址和
port作为其参数调用其checkConnect方法。 这可能会导致SecurityException。- 参数
-
address- 远程地址 -
port- 远程端口 -
localAddr-本地地址的套接字绑定到,或null为anyLocal地址。 -
localPort- 套接字绑定的本地端口或zero用于系统选定的空闲端口。 - 异常
-
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理器且其checkConnect方法不允许连接到目标,或者其checkListen方法不允许绑定到本地端口。 -
IllegalArgumentException- 如果port参数或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
Deprecated.Use DatagramSocket instead for UDP transport.创建流套接字并将其连接到指定主机上的指定端口号。如果指定的主机是
null,则相当于将地址指定为InetAddress.getByName(null)。 换句话说,它等同于指定环回接口的地址。如果stream参数为
true,则会创建一个流套接字。 如果stream参数为false,则会创建数据报套接字。如果应用程序指定了服务器套接字工厂,则调用该工厂的
createSocketImpl方法以创建实际的套接字实现。 否则会创建一个“普通”套接字。如果有安全管理器,则使用主机地址和
port作为其参数调用其checkConnect方法。 这可能会导致SecurityException。如果使用UDP套接字,则不适用与TCP / IP相关的套接字选项。
- 参数
-
host- 主机名,或环回地址的null。 -
port- 端口号。 -
stream-boolean指示这是流套接字还是数据报套接字。 - 异常
-
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理器且其checkConnect方法不允许该操作。 -
IllegalArgumentException- 如果port参数超出指定的有效端口值范围,则介于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
Deprecated.Use DatagramSocket instead for UDP transport.创建套接字并将其连接到指定IP地址处的指定端口号。如果stream参数为
true,则会创建一个流套接字。 如果stream参数为false,则会创建数据报套接字。如果应用程序已指定服务器套接字工厂,则调用该工厂的
createSocketImpl方法以创建实际的套接字实现。 否则会创建一个“普通”套接字。如果有安全管理器,则使用
host.getHostAddress()和port作为其参数调用其checkConnect方法。 这可能会导致SecurityException。如果使用UDP套接字,则不适用与TCP / IP相关的套接字选项。
- 参数
-
host- IP地址。 -
port- 端口号。 -
stream- 如果是true,则创建一个流套接字; 否则,创建一个数据报套接字。 - 异常
-
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理器且其checkConnect方法不允许该操作。 -
IllegalArgumentException- 如果port参数超出指定的有效端口值范围,则介于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- 如果endpoint为null或者是此套接字不支持的SocketAddress子类 - 从以下版本开始:
- 1.4
-
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
使用指定的超时值将此套接字连接到服务器。 超时为零被解释为无限超时。 然后,连接将阻塞,直到建立或发生错误。- 参数
-
endpoint-SocketAddress -
timeout- 要使用的超时值,以毫秒为单位。 - 异常
-
IOException- 如果连接期间发生错误 -
SocketTimeoutException- 如果超时在连接之前到期 -
IllegalBlockingModeException- 如果此套接字具有关联的通道,并且该通道处于非阻塞模式 -
IllegalArgumentException- 如果endpoint为null或者是此套接字不支持的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()
获取套接字绑定的本地地址。如果存在安全管理器集,则使用本地地址和
-1作为其参数调用其checkConnect方法,以查看是否允许该操作。 如果不允许该操作,则返回loopback地址。- 结果
- 套接字绑定的本地地址,安全管理器拒绝的环回地址,如果套接字已关闭或尚未绑定,则为通配符地址。
- 从以下版本开始:
- 1.1
- 另请参见:
-
SecurityManager.checkConnect(java.lang.String, int)
-
getPort
public int getPort()
返回此套接字连接的远程端口号。如果套接字在
closed之前已连接,则此方法将在套接字关闭后继续返回连接的端口号。- 结果
- 此套接字连接到的远程端口号,如果尚未连接套接字,则为0。
-
getLocalPort
public int getLocalPort()
- 结果
- 此套接字绑定到的本地端口号,如果尚未绑定套接字,则返回-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地址,其端口是它绑定的本地端口。如果存在安全管理器集,则使用本地地址和
-1作为其参数调用其checkConnect方法,以查看是否允许该操作。 如果不允许该操作,则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的所有后续调用将抛出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- 是否留在上面。 -
linger- 如果是真的,可以徘徊多长时间。 - 异常
-
SocketException- 如果底层协议中存在错误,例如TCP错误。 -
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。- 结果
-
a
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- 结果
-
此
Socket的SO_SNDBUF选项的值。 - 异常
-
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- 结果
-
此
Socket的SO_RCVBUF选项的值。 - 异常
-
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- bitset的值为int。 - 异常
-
SocketException- 如果设置流量类别或服务类型时出错 - 从以下版本开始:
- 1.4
- 另请参见:
-
getTrafficClass(),SocketOptions.IP_TOS
-
-
getTrafficClass
public int getTrafficClass() throws SocketException获取从此Socket发送的数据包的IP头中的流量类或服务类型由于底层网络实现可能会忽略使用
setTrafficClass(int)的流量类或服务类型集, 因此此方法可能返回与先前在此Socket上使用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)调用此方法。连接此套接字后调用此方法将不起作用。
- 参数
-
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,则此set可能为空。
- 从以下版本开始:
- 9
-
-