java.lang.Object
|---java.net.Socket
public class Socket
extends Object
implements Closeable
此类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通信的端点。
套接字的实际工作由 SocketImpl 类的实例执行。 应用程序通过更改创建套接字实现的套接字工厂,可以将自己配置为创建适合本地防火墙的套接字。
修饰符 | 构造函数 | 描述 |
---|---|---|
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。 |
修饰符和类型 | 方法 | 描述 |
---|---|---|
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() | 测试是否启用了 SocketOptions#SO_KEEPALIVE。 |
InetAddress | getLocalAddress() | 获取套接字绑定的本地地址。 |
int | getLocalPort() | 返回此套接字绑定到的本地端口号。 |
SocketAddress | getLocalSocketAddress() | 返回此套接字绑定到的端点的地址。 |
boolean | getOOBInline() | 测试是否启用了 SocketOptions#SO_OOBINLINE。 |
OutputStream | getOutputStream() | 返回此套接字的输出流。 |
int | getPort() | 返回此套接字连接到的远程端口号。 |
int | getReceiveBufferSize() | 获取此 Socket 的 SocketOptions#SO_RCVBUF 选项的值,即平台用于在此 Socket 上输入的缓冲区大小。 |
SocketAddress | getRemoteSocketAddress() | 返回此套接字连接到的端点的地址,如果未连接,则返回 null。 |
boolean | getReuseAddress() | 测试 SocketOptions#SO_REUSEADDR 是否启用。 |
int | getSendBufferSize() | 获取此 Socket 的 SocketOptions#SO_SNDBUF 选项的值,即平台用于在此 Socket 上输出的缓冲区大小。 |
int | getSoLinger() | 返回 SocketOptions#SO_LINGER 的设置。 |
int | getSoTimeout() | 返回 SocketOptions#SO_TIMEOUT 的设置。 |
boolean | getTcpNoDelay() | 测试是否启用了 SocketOptions#TCP_NODELAY。 |
int | getTrafficClass() | 获取从此 Socket 发送的数据包的 IP 标头中的流量类别或服务类型 |
boolean | isBound() | 返回套接字的绑定状态。 |
boolean | isClosed() | 返回套接字的关闭状态。 |
boolean | isConnected() | 返回套接字的连接状态。 |
boolean | isInputShutdown() | 返回套接字连接的读半部分是否关闭。 |
boolean | isOutputShutdown() | 返回套接字连接的写半部分是否关闭。 |
void | sendUrgentData(int data) | 在套接字上发送一个字节的紧急数据。 |
void | setKeepAlive(boolean on) | 启用/禁用 SocketOptions#SO_KEEPALIVE。 |
void | setOOBInline(boolean on) | 启用/禁用 SocketOptions#SO_OOBINLINE(接收 TCP 紧急数据) 默认情况下,禁用此选项,并且在套接字上接收到的 TCP 紧急数据被静默丢弃。 |
void | setPerformancePreferences(int connectionTime, int latency, int bandwidth) | 设置此套接字的性能首选项。 |
void | setReceiveBufferSize(int size) | 将 SocketOptions#SO_RCVBUF 选项设置为此 Socket 的指定值。 |
void | setReuseAddress(boolean on) | 启用/禁用 SocketOptions#SO_REUSEADDR 套接字选项。 |
void | setSendBufferSize(int size) | 将 SocketOptions#SO_SNDBUF 选项设置为此 Socket 的指定值。 |
static void | setSocketImplFactory(SocketImplFactory fac) | 为应用程序设置客户端套接字实现工厂。 |
void | setSoLinger(boolean on, int linger) | 使用指定的延迟时间(以秒为单位)启用/禁用 SocketOptions#SO_LINGER。 |
void | setSoTimeout(int timeout) | 使用指定的超时启用/禁用 SocketOptions#SO_TIMEOUT,以毫秒为单位。 |
void | setTcpNoDelay(boolean on) | 启用/禁用 SocketOptions#TCP_NODELAY(禁用/启用 Nagle 算法)。 |
void | setTrafficClass(int tc) | 为从此 Socket 发送的数据包设置 IP 标头中的流量类别或服务类型八位字节。 |
void | shutdownInput() | 将此套接字的输入流放在“流的末尾”。 |
void | shutdownOutput() | 禁用此套接字的输出流。 |
String | toString() | 将此套接字转换为字符串。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
public Socket()
创建一个未连接的套接字,系统默认类型为 SocketImpl。
public Socket(Proxy proxy)
创建一个未连接的套接字,指定代理的类型(如果有),无论任何其他设置如何,都应使用该类型。
如果存在安全管理器,则调用其 checkConnect 方法,并使用代理主机地址和端口号作为其参数。 这可能会导致 SecurityException。
例子:
参数:
参数名称 | 参数描述 |
---|---|
proxy | 指定应使用哪种代理的代理对象。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果代理的类型无效或为空。 |
SecurityException | 如果存在安全管理器并且拒绝连接到代理的权限。 |
protected Socket(SocketImpl impl) throws SocketException
使用用户指定的 SocketImpl 创建一个未连接的 Socket。
参数:
参数名称 | 参数描述 |
---|---|
impl | 子类希望在 Socket 上使用的 SocketImpl 的实例。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
SecurityException | 如果 impl 不为 null 并且设置了安全管理器,并且其 checkPermission 方法不允许 NetPermission("setSocketImpl")。 |
public Socket(String host, int port) throws IOException, UnknownHostException
创建一个流套接字并将其连接到指定主机上的指定端口号。
如果指定的主机为空,则相当于将地址指定为 InetAddress.getByName(null)。 也就是说,相当于指定了loopback接口的地址。
如果应用程序指定了服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际的套接字实现。 否则会创建一个“普通”套接字。
如果存在安全管理器,则调用其 checkConnect 方法,并使用主机地址和端口作为其参数。 这可能会导致 SecurityException。
参数:
参数名称 | 参数描述 |
---|---|
host | 主机名,或 null 用于环回地址。 |
port | 端口号。 |
Throws:
Throw名称 | Throw描述 |
---|---|
UnknownHostException | 如果无法确定主机的 IP 地址。 |
IOException | 如果在创建套接字时发生 I/O 错误。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允许该操作。 |
IllegalArgumentException | 如果端口参数超出指定的有效端口值范围,即介于 0 和 65535 之间(包括 0 和 65535)。 |
public Socket(InetAddress address, int port) throws IOException
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
如果应用程序指定了套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际的套接字实现。 否则会创建一个“普通”套接字。
如果存在安全管理器,则调用其 checkConnect 方法,并使用主机地址和端口作为其参数。 这可能会导致 SecurityException。
参数:
参数名称 | 参数描述 |
---|---|
address | IP 地址。 |
port | 端口号。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建套接字时发生 I/O 错误。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允许该操作。 |
IllegalArgumentException | 如果端口参数超出指定的有效端口值范围,即介于 0 和 65535 之间(包括 0 和 65535)。 |
NullPointerException | 如果地址为空。 |
public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
创建一个套接字并将其连接到指定远程端口上的指定远程主机。 Socket 还将 bind() 到提供的本地地址和端口。
如果指定的主机为空,则相当于将地址指定为 InetAddress.getByName(null)。 也就是说,相当于指定了loopback接口的地址。
本地端口号为零将使系统在绑定操作中选择一个空闲端口。
如果存在安全管理器,则调用其 checkConnect 方法,并使用主机地址和端口作为其参数。 这可能会导致 SecurityException。
参数:
参数名称 | 参数描述 |
---|---|
host | 远程主机的名称,或 null 为环回地址。 |
port | 远程端口 |
localAddr | 套接字绑定到的本地地址,或者对于 anyLocal 地址为 null。 |
localPort | 套接字绑定到的本地端口,或者系统选择的空闲端口为零。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建套接字时发生 I/O 错误。 |
SecurityException | 如果安全管理器存在并且它的 checkConnect 方法不允许连接到目标,或者它的 checkListen 方法不允许绑定到本地端口。 |
IllegalArgumentException | 如果 port 参数或 localPort 参数超出指定的有效端口值范围,即 0 到 65535 之间,包括 0 和 65535。 |
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
创建一个套接字并将其连接到指定远程端口上的指定远程地址。 Socket 还将 bind() 到提供的本地地址和端口。
如果指定的本地地址为空,则相当于将该地址指定为 AnyLocal 地址(请参阅 InetAddress.isAnyLocalAddress())。
本地端口号为零将使系统在绑定操作中选择一个空闲端口。
如果存在安全管理器,则调用其 checkConnect 方法,并使用主机地址和端口作为其参数。 这可能会导致 SecurityException。
参数:
参数名称 | 参数描述 |
---|---|
address | 远程地址 |
port | 远程端口 |
localAddr | 套接字绑定到的本地地址,或者对于 anyLocal 地址为 null。 |
localPort | 套接字绑定到的本地端口或系统选择的空闲端口为零。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建套接字时发生 I/O 错误。 |
SecurityException | 如果安全管理器存在并且它的 checkConnect 方法不允许连接到目标,或者它的 checkListen 方法不允许绑定到本地端口。 |
IllegalArgumentException | 如果 port 参数或 localPort 参数超出指定的有效端口值范围,即 0 到 65535 之间,包括 0 和 65535。 |
NullPointerException | 如果地址为空。 |
@Deprecated public Socket(String host, int port, boolean stream) throws IOException
已弃用。 使用 DatagramSocket 代替 UDP 传输。
创建一个流套接字并将其连接到指定主机上的指定端口号。
如果指定的主机为空,则相当于将地址指定为 InetAddress.getByName(null)。 也就是说,相当于指定了loopback接口的地址。
如果流参数为真,这将创建一个流套接字。 如果流参数为假,它会创建一个数据报套接字。
如果应用程序指定了服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际的套接字实现。 否则会创建一个“普通”套接字。
如果存在安全管理器,则调用其 checkConnect 方法,并使用主机地址和端口作为其参数。 这可能会导致 SecurityException。
如果使用 UDP 套接字,则与 TCP/IP 相关的套接字选项将不适用。
参数:
参数名称 | 参数描述 |
---|---|
host | 主机名,或 null 用于环回地址。 |
port | 端口号。 |
stream | 一个布尔值,指示这是流套接字还是数据报套接字。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建套接字时发生 I/O 错误。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允许该操作。 |
IllegalArgumentException | 如果端口参数超出指定的有效端口值范围,即介于 0 和 65535 之间(包括 0 和 65535)。 |
@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
已弃用。 使用 DatagramSocket 代替 UDP 传输。
创建一个套接字并将其连接到指定 IP 地址的指定端口号。
如果流参数为真,这将创建一个流套接字。 如果流参数为假,它会创建一个数据报套接字。
如果应用程序指定了服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际的套接字实现。 否则会创建一个“普通”套接字。
如果有安全管理器,则调用其 checkConnect 方法,并使用 host.getHostAddress() 和 port 作为其参数。 这可能会导致 SecurityException。
如果使用 UDP 套接字,则 TCP/IP 相关的套接字选项将不适用。
参数:
参数名称 | 参数描述 |
---|---|
host | IP 地址。 |
port | 端口号。 |
stream | 如果为true,则创建一个流套接字; 否则,创建一个数据报套接字。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建套接字时发生 I/O 错误。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允许该操作。 |
IllegalArgumentException | 如果端口参数超出指定的有效端口值范围,即介于 0 和 65535 之间(包括 0 和 65535)。 |
NullPointerException | 如果主机为空。 |
public void connect(SocketAddress endpoint) throws IOException
将此套接字连接到服务器。
参数:
参数名称 | 参数描述 |
---|---|
endpoint | 套接字地址 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在连接过程中发生错误 |
IllegalBlockingModeException | 如果此套接字具有关联的通道,并且该通道处于非阻塞模式 |
IllegalArgumentException | 如果端点为 null 或者是此套接字不支持的 SocketAddress 子类 |
public void connect(SocketAddress endpoint, int timeout) throws IOException
将此套接字连接到具有指定超时值的服务器。 超时为零被解释为无限超时。 然后连接将阻塞,直到建立或发生错误。
参数:
参数名称 | 参数描述 |
---|---|
endpoint | 套接字地址 |
timeout | 以毫秒为单位使用的超时值。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在连接过程中发生错误 |
SocketTimeoutException | 如果超时在连接之前到期 |
IllegalBlockingModeException | 如果此套接字具有关联的通道,并且该通道处于非阻塞模式 |
IllegalArgumentException | 如果端点为 null 或者是此套接字不支持的 SocketAddress 子类 |
public void bind(SocketAddress bindpoint) throws IOException
将套接字绑定到本地地址。
如果地址为空,那么系统将选择一个临时端口和一个有效的本地地址来绑定套接字。
参数:
参数名称 | 参数描述 |
---|---|
bindpoint | 要绑定到的 SocketAddress |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果绑定操作失败,或者套接字已经绑定。 |
IllegalArgumentException | 如果 bindpoint 是此套接字不支持的 SocketAddress 子类 |
SecurityException | 如果存在安全管理器并且其 checkListen 方法不允许绑定到本地端口。 |
public InetAddress getInetAddress()
返回套接字连接的地址。
如果套接字在关闭之前已连接,则此方法将在套接字关闭后继续返回已连接的地址。
返回:
此套接字连接到的远程 IP 地址,如果套接字未连接,则为 null。
public InetAddress getLocalAddress()
获取套接字绑定的本地地址。
如果设置了安全管理器,则使用本地地址和 -1 作为其参数调用其 checkConnect 方法,以查看是否允许该操作。 如果不允许该操作,则返回 InetAddress#getLoopbackAddress 地址。
返回:
套接字绑定的本地地址,如果安全管理器拒绝,则为环回地址,或者如果套接字已关闭或尚未绑定,则为通配符地址。
public int getPort()
返回此套接字连接到的远程端口号。
如果套接字在关闭之前已连接,则此方法将在套接字关闭后继续返回连接的端口号。
返回:
此套接字连接到的远程端口号,如果套接字尚未连接,则为 0。
public int getLocalPort()
返回此套接字绑定到的本地端口号。
如果套接字在关闭之前已经绑定,那么该方法将在套接字关闭后继续返回本地端口号。
返回:
此套接字绑定到的本地端口号,如果尚未绑定套接字,则为 -1。
public SocketAddress getRemoteSocketAddress()
返回此套接字连接到的端点的地址,如果未连接,则返回 null。
如果套接字在关闭之前已连接,则此方法将在套接字关闭后继续返回已连接的地址。
返回:
表示此套接字的远程端点的 SocketAddress,如果尚未连接,则为 null。
public SocketAddress getLocalSocketAddress()
返回此套接字绑定到的端点的地址。
如果绑定到由 InetSocketAddress 表示的端点的套接字关闭,则此方法将在套接字关闭后继续返回 InetSocketAddress。 在这种情况下,返回的 InetSocketAddress 的地址是 InetAddress#isAnyLocalAddress 地址,它的端口是它绑定到的本地端口。
如果设置了安全管理器,则使用本地地址和 -1 作为其参数调用其 checkConnect 方法,以查看是否允许该操作。 如果不允许该操作,则返回表示 InetAddress#getLoopbackAddress 地址和此套接字绑定的本地端口的 SocketAddress。
返回:
表示此套接字的本地端点的 SocketAddress,如果被安全管理器拒绝,则表示环回地址的 SocketAddress,如果尚未绑定套接字,则为 null。
public SocketChannel getChannel()
返回与此套接字关联的唯一 SocketChannel 对象(如果有)。
当且仅当通道本身是通过 SocketChannel.open 或 ServerSocketChannel.accept 方法创建时,套接字才会有通道。
返回:
与此套接字关联的套接字通道,如果此套接字不是为通道创建的,则为 null
public InputStream getInputStream() throws IOException
返回此套接字的输入流。
如果此套接字具有关联的通道,则生成的输入流将其所有操作委托给通道。如果通道处于非阻塞模式,则输入流的读取操作将抛出 IllegalBlockingModeException。
在异常情况下,底层连接可能会被远程主机或网络软件中断(例如 TCP 连接情况下的连接重置)。当网络软件检测到断开的连接时,以下内容适用于返回的输入流:-
关闭返回的 InputStream 将关闭关联的套接字。
返回:
用于从此套接字读取字节的输入流。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建输入流时发生 I/O 错误、套接字已关闭、套接字未连接或套接字输入已使用 shutdownInput() 关闭 |
public OutputStream getOutputStream() throws IOException
返回此套接字的输出流。
如果此套接字具有关联的通道,则生成的输出流将其所有操作委托给通道。 如果通道处于非阻塞模式,则输出流的写入操作将引发 IllegalBlockingModeException。
关闭返回的 OutputStream 将关闭关联的套接字。
返回:
用于将字节写入此套接字的输出流。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果在创建输出流时发生 I/O 错误或套接字未连接。 |
public void setTcpNoDelay(boolean on) throws SocketException
启用/禁用 SocketOptions#TCP_NODELAY(禁用/启用 Nagle 算法)。
参数:
参数名称 | 参数描述 |
---|---|
on | true 启用 TCP_NODELAY,false 禁用。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public boolean getTcpNoDelay() throws SocketException
测试是否启用了 SocketOptions#TCP_NODELAY。
返回:
一个布尔值,指示是否启用 SocketOptions#TCP_NODELAY。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void setSoLinger(boolean on, int linger) throws SocketException
使用指定的延迟时间(以秒为单位)启用/禁用 SocketOptions#SO_LINGER。 最大超时值是特定于平台的。 该设置仅影响套接字关闭。
参数:
参数名称 | 参数描述 |
---|---|
on | 是否留恋。 |
linger | 如果 on 为true,要逗留多久。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
IllegalArgumentException | 如果延迟值为负。 |
public int getSoLinger() throws SocketException
返回 SocketOptions#SO_LINGER 的设置。 -1 返回意味着该选项被禁用。 该设置仅影响套接字关闭。
返回:
SocketOptions#SO_LINGER 的设置。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void sendUrgentData(int data) throws IOException
在套接字上发送一个字节的紧急数据。 要发送的字节是数据参数的最低八位。 紧急字节在任何先前写入套接字 OutputStream 之后和任何未来写入 OutputStream 之前发送。
参数:
参数名称 | 参数描述 |
---|---|
data | 要发送的数据字节 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发送数据时出错。 |
public void setOOBInline(boolean on) throws SocketException
启用/禁用 SocketOptions#SO_OOBINLINE(接收 TCP 紧急数据) 默认情况下,禁用此选项,并且在套接字上接收到的 TCP 紧急数据被静默丢弃。 如果用户希望接收紧急数据,则必须启用此选项。 启用后,紧急数据将与普通数据一起接收。
请注意,仅提供有限的支持来处理传入的紧急数据。 特别是,不提供传入紧急数据的通知,并且没有能力区分正常数据和紧急数据,除非由更高级别的协议提供。
参数:
参数名称 | 参数描述 |
---|---|
on | true 启用 SocketOptions#SO_OOBINLINE, false 禁用。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public boolean getOOBInline() throws SocketException
测试是否启用了 SocketOptions#SO_OOBINLINE。
返回:
一个布尔值,指示是否启用 SocketOptions#SO_OOBINLINE。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void setSoTimeout(int timeout) throws SocketException
使用指定的超时启用/禁用 SocketOptions#SO_TIMEOUT,以毫秒为单位。 将此选项设置为非零超时,对与此 Socket 关联的 InputStream 的 read() 调用将仅阻塞此时间量。 如果超时到期,则会引发 java.net.SocketTimeoutException,尽管 Socket 仍然有效。 必须在进入阻塞操作之前启用该选项才能生效。 超时必须 > 0。超时为零被解释为无限超时。
参数:
参数名称 | 参数描述 |
---|---|
timeout | 指定的超时时间,以毫秒为单位。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public int getSoTimeout() throws SocketException
返回 SocketOptions#SO_TIMEOUT 的设置。 返回 0 表示该选项被禁用(即无限超时)。
返回:
SocketOptions#SO_TIMEOUT 的设置
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void setSendBufferSize(int size) throws SocketException
将 SocketOptions#SO_SNDBUF 选项设置为此 Socket 的指定值。 SocketOptions#SO_SNDBUF 选项被平台的网络代码用作设置底层网络 I/O 缓冲区大小的提示。
因为 SocketOptions#SO_SNDBUF 是一个提示,所以想要验证缓冲区设置为多大大小的应用程序应该调用 getSendBufferSize()。
参数:
参数名称 | 参数描述 |
---|---|
size | 设置发送缓冲区大小的大小。 该值必须大于 0。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
IllegalArgumentException | 如果值为 0 或为负数。 |
public int getSendBufferSize() throws SocketException
获取此 Socket 的 SocketOptions#SO_SNDBUF 选项的值,即平台用于在此 Socket 上输出的缓冲区大小。
返回:
此 Socket 的 SocketOptions#SO_SNDBUF 选项的值。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void setReceiveBufferSize(int size) throws SocketException
将 SocketOptions#SO_RCVBUF 选项设置为此 Socket 的指定值。 SocketOptions#SO_RCVBUF 选项被平台的网络代码用作设置底层网络 I/O 缓冲区大小的提示。
增加接收缓冲区大小可以提高大容量连接的网络 I/O 性能,而减小它可以帮助减少传入数据的积压。
因为 SocketOptions#SO_RCVBUF 是一个提示,所以想要验证缓冲区设置为多大大小的应用程序应该调用 getReceiveBufferSize()。
SocketOptions#SO_RCVBUF 的值也用于设置通告给远程对等方的 TCP 接收窗口。一般情况下,只要连接了套接字,就可以随时修改窗口大小。但是,如果需要大于 64K 的接收窗口,则必须在套接字连接到远程对等点之前请求。有两种情况需要注意:
参数:
参数名称 | 参数描述 |
---|---|
size | 设置接收缓冲区大小的大小。 该值必须大于 0。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果值为 0 或为负数。 |
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public int getReceiveBufferSize() throws SocketException
获取此 Socket 的 SocketOptions#SO_RCVBUF 选项的值,即平台用于在此 Socket 上输入的缓冲区大小。
返回:
此 Socket 的 SocketOptions#SO_RCVBUF 选项的值。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void setKeepAlive(boolean on) throws SocketException
启用/禁用 SocketOptions#SO_KEEPALIVE。
参数:
参数名称 | 参数描述 |
---|---|
on | 是否开启socket keep alive。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public boolean getKeepAlive() throws SocketException
测试是否启用了 SocketOptions#SO_KEEPALIVE。
返回:
一个布尔值,指示是否启用 SocketOptions#SO_KEEPALIVE。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void setTrafficClass(int tc) throws SocketException
为从此 Socket 发送的数据包设置 IP 标头中的流量类别或服务类型八位字节。由于底层网络实现可能会忽略此值,因此应用程序应将其视为提示。
tc 必须在 0 <= tc <= 255 范围内,否则将抛出 IllegalArgumentException。
笔记:
对于 Internet 协议 v4,该值由一个整数组成,其中最低有效 8 位表示套接字发送的 IP 数据包中 TOS 八位字节的值。 RFC 1349 定义 TOS 值如下:
最后一个低位总是被忽略,因为它对应于 MBZ(必须为零)位。
设置优先级字段中的位可能会导致 SocketException 指示不允许该操作。
正如 RFC 1122 第 4.2.4.2 节所示,兼容的 TCP 实现应该但不是必须让应用程序在连接的生命周期内更改 TOS 字段。所以在TCP连接建立后是否可以改变type-of-service字段取决于底层平台的实现。应用程序不应假设他们可以在连接后更改 TOS 字段。
对于 Internet 协议 v6,tc 是放置在 IP 标头的 sin6_flowinfo 字段中的值。
参数:
参数名称 | 参数描述 |
---|---|
tc | 位集的 int 值。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果设置流量类别或服务类型时出错 |
public int getTrafficClass() throws SocketException
获取从此 Socket 发送的数据包的 IP 标头中的流量类别或服务类型
由于底层网络实现可能会忽略使用 setTrafficClass(int) 设置的流量类或服务类型,因此此方法可能返回与之前在此 Socket 上使用 setTrafficClass(int) 方法设置的值不同的值。
返回:
已设置的流量类别或服务类型
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果获取流量类别或服务类型值时出错。 |
public void setReuseAddress(boolean on) throws SocketException
启用/禁用 SocketOptions#SO_REUSEADDR 套接字选项。
当 TCP 连接关闭时,连接可能会在连接关闭后的一段时间内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态)。 对于使用众所周知的套接字地址或端口的应用程序,如果存在涉及套接字地址或端口的处于超时状态的连接,则可能无法将套接字绑定到所需的 SocketAddress。
在使用 bind(java.net.SocketAddress) 绑定套接字之前启用 SocketOptions#SO_REUSEADDR 允许绑定套接字,即使先前的连接处于超时状态。
创建 Socket 时,SocketOptions#SO_REUSEADDR 的初始设置被禁用。
未定义套接字绑定后启用或禁用 SocketOptions#SO_REUSEADDR 时的行为(参见 isBound())。
参数:
参数名称 | 参数描述 |
---|---|
on | 是否启用或禁用套接字选项 |
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果启用或禁用 SocketOptions#SO_REUSEADDR 套接字选项发生错误,或者套接字已关闭。 |
public boolean getReuseAddress() throws SocketException
测试 SocketOptions#SO_REUSEADDR 是否启用。
返回:
一个布尔值,指示是否启用 SocketOptions#SO_REUSEADDR。
Throws:
Throw名称 | Throw描述 |
---|---|
SocketException | 如果底层协议有错误,例如 TCP 错误。 |
public void close() throws IOException
关闭此套接字。
当前在此套接字上的 I/O 操作中阻塞的任何线程都将抛出 SocketException。
一旦套接字关闭,它就不能用于进一步的网络使用(即不能重新连接或重新连接)。 需要创建一个新的套接字。
关闭此套接字也会关闭套接字的 InputStream 和 OutputStream。
如果此套接字具有关联的通道,则该通道也将关闭。
指定者:
在接口 AutoCloseable 中关闭
指定者:
在接口Closeable中关闭
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果关闭此套接字时发生 I/O 错误。 |
public void shutdownInput() throws IOException
将此套接字的输入流放在“流的末尾”。 任何发送到套接字输入流端的数据都会被确认,然后被静默丢弃。
如果在套接字上调用此方法后从套接字输入流中读取,则流的可用方法将返回 0,其读取方法将返回 -1(流结束)。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果关闭此套接字时发生 I/O 错误。 |
public void shutdownOutput() throws IOException
禁用此套接字的输出流。 对于 TCP 套接字,任何先前写入的数据都将按照 TCP 的正常连接终止顺序发送。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将引发 IOException。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果关闭此套接字时发生 I/O 错误。 |
public String toString()
将此套接字转换为字符串。
覆盖:
类 Object 中的 toString
返回:
此套接字的字符串表示形式。
public boolean isConnected()
返回套接字的连接状态。
注意:关闭套接字不会清除其连接状态,这意味着如果在关闭之前成功连接,则此方法将为已关闭的套接字返回 true。
返回:
如果套接字成功连接到服务器,则为 true
public boolean isBound()
返回套接字的绑定状态。
注意:关闭套接字不会清除其绑定状态,这意味着如果在关闭之前成功绑定,则此方法将为已关闭的套接字返回 true。
返回:
如果套接字成功绑定到地址,则为 true
public boolean isClosed()
返回套接字的关闭状态。
返回:
如果套接字已关闭,则为 true
public boolean isInputShutdown()
返回套接字连接的读半部分是否关闭。
返回:
如果套接字的输入已关闭,则为 true
public boolean isOutputShutdown()
返回套接字连接的写半部分是否关闭。
返回:
如果套接字的输出已关闭,则为 true
public static void setSocketImplFactory(SocketImplFactory fac) throws IOException
为应用程序设置客户端套接字实现工厂。 工厂只能指定一次。
当应用程序创建新的客户端套接字时,会调用套接字实现工厂的 createSocketImpl 方法来创建实际的套接字实现。
除非已经设置了工厂,否则将 null 传递给方法是无操作的。
如果有安全管理器,该方法首先调用安全管理器的 checkSetFactory 方法,确保操作被允许。 这可能会导致 SecurityException。
参数:
参数名称 | 参数描述 |
---|---|
fac | 想要的工厂。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果设置套接字工厂时发生 I/O 错误。 |
SocketException | 如果工厂已经定义。 |
SecurityException | 如果存在安全管理器并且其 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 |
NavigableSetpublic interface NavigableSetEextends SortedSetE使用导航方法扩展的 SortedSet,报告给定搜索目标的最接近匹配。...
联系我们开发过程中遇到任何问题,请前往微信开放社区提问。 提问时,建议标题以【物流助手】开头,会第一时间解答你的疑问。...
为了满足大家查询需要,我们收集并整理了一份 :微信小程序导航大全你可以很方便的通过扫二维码去使用这些小程序。wx.navigateTo(...
9.29.1. 在命令结束处捕捉更改9.29.2. 处理被 DDL 命令删除的对象9.29.3. 处理表重写事件 PostgreSQL提供了这些助手函数来从 事...
9.15.1. 产生 XML 内容9.15.2. XML 谓词9.15.3. 处理 XML9.15.4. 将表映射到 XML本节中描述的函数以及类函数的表达式都在类型xml...
目录D.1. 已支持特性D.2. 未支持特性D.3. XML对于SQL的限制和符合性/XMLD.3.1. 查询只限于XPath 1.0D.3.2. 实现中的附带限制这一...
DROP ROUTINE — 删除一个例程 大纲DROP ROUTINE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...
XSLT xsl:apply-templates 元素xsl:apply-templates 元素可把一个模板应用于当前的元素或者当前元素的子节点。xsl:apply-templat...
XML DOM hasAttributeNS() 方法 Element 对象定义和用法 hasAttributeNS() 方法在当前元素节点拥有匹配指定命名空间和名称的属性...