Properties |
---|
public boolean | isBound()
返回套接字的绑定状态。
return |
如果将套接字成功地绑定到一个地址,则返回 true | since | 1.4 | See also | bind |
|
public SocketChannel | getChannel()
返回与此数据报套接字关联的唯一 SocketChannel 对象(如果有)。 当且仅当通过 SocketChannel.open 或 ServerSocketChannel.accept 方法创建了通道本身时,套接字才具有一个通道。
return |
与此套接字关联的套接字通道,如果没有为通道创建套接字,则返回 null。 | since | 1.4 | spec | JSR-51 |
|
public boolean | isClosed()
返回套接字的关闭状态。
return |
如果已经关闭了套接字,则返回 true | since | 1.4 | See also | close |
|
public boolean | isConnected()
返回套接字的连接状态。
return |
如果将套接字成功地连接到服务器,则为 true。 | since | 1.4 |
|
public InetAddress | getInetAddress()
返回套接字连接的地址。
return |
此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null 。 |
|
public boolean | isInputShutdown()
返回是否关闭套接字连接的半读状态 (read-half)。
|
public InputStream | getInputStream() throws IOException
返回此套接字的输入流。 如果此套接字具有关联的通道,则所得的输入流会将其所有操作委托给通道。如果通道为非阻塞模式,则输入流的 read 操作将抛出java.nio.channels.IllegalBlockingModeException 。 在非正常条件下,底层连接可能被远程主机或网络软件中断(例如,TCP 连接情况下的连接重置)。当网络软件检测到中断的连接时,将对返回的输入流应用以下操作:
关闭返回的 InputStream 将关闭关联套接字。
|
public void | setKeepAlive(boolean on) throws SocketException
启用/禁用 SO_KEEPALIVE。
|
public boolean | getKeepAlive() throws SocketException
测试是否启用 SO_KEEPALIVE。
|
public InetAddress | getLocalAddress()
获取套接字绑定的本地地址。
return |
将套接字绑定到的本地地址;如果尚未绑定套接字,则返回 InetAddress.anyLocalAddress() 。 | since | JDK1.1 |
|
public int | getLocalPort()
返回此套接字绑定到的本地端口。
return |
此套接字绑定到的本地端口号;如果尚未绑定套接字,则返回 -1。 |
|
public SocketAddress | getLocalSocketAddress()
返回此套接字绑定的端点的地址,如果尚未绑定则返回 null 。
|
public void | setOOBInline(boolean on) throws SocketException
启用/禁用 OOBINLINE(TCP 紧急数据的接收者) 默认情况下,此选项是禁用的,即在套接字上接收的 TCP 紧急数据被静默丢弃。如果用户希望接收到紧急数据,则必须启用此选项。启用时,可以将紧急数据内嵌在普通数据中接收 注意,仅为处理传入紧急数据提供有限支持。特别要指出的是,不提供传入紧急数据的任何通知并且不存在区分普通数据和紧急数据的功能(除非更高级别的协议提供)。
|
public boolean | getOOBInline() throws SocketException
测试是否启用 OOBINLINE。
|
public boolean | isOutputShutdown()
返回是否关闭套接字连接的半写状态 (write-half)。
|
public OutputStream | getOutputStream() throws IOException
返回此套接字的输出流。 如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出java.nio.channels.IllegalBlockingModeException 。 关闭返回的 OutputStream 将关闭关联套接字。
return |
将字节写入此套接字的输出流。 | Throws | IOException:
如果创建输出流时发生 I/O 错误或者没有连接套接字。 | revised | 1.4 | spec | JSR-51 |
|
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 | since | 1.5 |
|
public int | getPort()
返回此套接字连接到的远程端口。
return |
此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0。 |
|
public void | setReceiveBufferSize(int size) throws SocketException
将此 Socket 的 SO_RCVBUF 选项设置为指定的值。平台的网络连接代码将 SO_RCVBUF 选项用作设置底层网络 I/O 缓存的大小的提示。 增大接收缓存大小可以增大大量连接的网络 I/O 的性能,而减小它有助于减少传入数据的 backlog。 由于 SO_RCVBUF 是一种提示,想要验证缓冲区设置大小的应用程序应该调用 #getReceiveBufferSize() 。 SO_RCVBUF 的值还用于设置公布到远程同位体的 TCP 接收窗口。一般情况下,当连接套接字时,可以在任意时间更改窗口大小。然而,如果需要的接收窗口大于 64K,则必须在将套接字连接到远程同位体之前请求。下面是需要知道的两种情况:
- 对于从 ServerSocket 接受的套接字,必须在将 ServerSocket 绑定到本地地址前通过调用
ServerSocket#setReceiveBufferSize(int) 执行此操作。 - 对于客户端套接字,则必须在将套接字连接到其远程同位体前调用 setReceiveBufferSize()。
|
public int | getReceiveBufferSize() throws SocketException
获取此 Socket 的 SO_RCVBUF 选项的值,该值是平台在 Socket 上输入时使用的缓冲区大小。
|
public SocketAddress | getRemoteSocketAddress()
返回此套接字连接的端点的地址,如果未连接则返回 null 。
|
public void | setReuseAddress(boolean on) throws SocketException
启用/禁用 SO_REUSEADDR 套接字选项。 关闭 TCP 连接时,该连接可能在关闭后的一段时间内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态)。对于使用已知套接字地址或端口的应用程序而言,如果存在处于超时状态的连接(包括地址和端口),可能不能将套接字绑定到所需的 SocketAddress 上。 使用 #bind(SocketAddress) 绑定套接字前启用 SO_REUSEADDR 允许在上一个连接处于超时状态时绑定套接字。 当创建 Socket 时,禁用 SO_REUSEADDR 的初始设置。 在绑定套接字(请参阅 #isBound() )后启用或禁用 SO_REUSEADDR 时的行为是不确定的。
|
public boolean | getReuseAddress() throws SocketException
检测是否启用了 SO_REUSEADDR。
|
public void | setSendBufferSize(int size) throws SocketException
将此 Socket 的 SO_SNDBUF 选项设置为指定的值。平台的网络连接代码将 SO_SNDBUF 选项用作设置底层网络 I/O 缓存的大小的提示。 由于 SO_SNDBUF 是一种提示,想要验证缓冲区设置大小的应用程序应该调用 #getSendBufferSize() 。
|
public int | getSendBufferSize() throws SocketException
获取此 Socket 的 SO_SNDBUF 选项的值,该值是平台在 Socket 上输出时使用的缓冲区大小。
|
public static void | setSocketImplFactory(SocketImplFactory fac) throws IOException
为应用程序设置客户端套接字实现工厂。工厂只能指定一次。 当应用程序创建新的客户端套接字时,调用套接字实现工厂的 createSocketImpl 方法创建实际的套接字实现。 除非已经设置了工厂,否则向该方法传递 null 是无操作。 如果有安全管理器,则此方法首先调用安全管理器的 checkSetFactory 方法,以确保允许进行该操作。这可能会导致 SecurityException 异常。
|
public void | setSoLinger(boolean on, int linger) throws SocketException
启用/禁用具有指定逗留时间(以秒为单位)的 SO_LINGER。最大超时值是特定于平台的。 该设置仅影响套接字关闭。
|
public int | getSoLinger() throws SocketException
返回 SO_LINGER 的设置。返回 -1 意味着禁用该选项。 该设置仅影响套接字关闭。
|
public void | setSoTimeout(int timeout) throws SocketException
启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
|
public int | getSoTimeout() throws SocketException
返回 SO_TIMEOUT 的设置。返回 0 意味着禁用了选项(即无穷大的超时值)。
|
public void | setTcpNoDelay(boolean on) throws SocketException
启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。
|
public boolean | getTcpNoDelay() throws SocketException
测试是否启用 TCP_NODELAY。
|
public void | setTrafficClass(int tc) throws SocketException
为从此 Socket 上发送的包在 IP 头中设置流量类别 (traffic class) 或服务类型八位组 (type-of-service octet)。由于底层网络实现可能忽略此值,应用程序应该将其视为一种提示。 tc 的值必须在 0 <= tc <= 255 范围内,否则将抛出 IllegalArgumentException。 注: 对于 Internet Protocol v4 该值由包含优先级和 TOS 字段的八位组组成,这在 RFC 1349 中有详细叙述。TOS 字段是由以下逐位或所得值创建的位集:
IPTOS_LOWCOST (0x02) IPTOS_RELIABILITY (0x04) IPTOS_THROUGHPUT (0x08) IPTOS_LOWDELAY (0x10) 末尾的最低位常常被忽略,因为该位对应于 MBZ(必须为 0)位。 设置优先级字段中的位可能导致 SocketException,指示不允许该操作。 根据 RFC 1122 第 4.2.4.2 节中的指示,兼容的 TCP 实现应该(但不是必须)让应用程序在连接的生命周期中改变 TOS 字段。因此,type-of-service(服务类型)字段在已建立 TCP 连接之后能否更改取决于底层平台的实现。应用程序不应假定它们在连接之后能够改变 TOS 字段。 对于 Internet Protocol v6 tc 是将被放置到 IP 头部的 sin6_flowinfo 字段中的值。
|
public int | getTrafficClass() throws SocketException
为从此 Socket 上发送的包获取 IP 头中的流量类别或服务类型。 由于底层网络实现可能忽略使用 #setTrafficClass(int) 设置的流量类别或服务类型,因而此方法可能返回一个不同于以前用#setTrafficClass(int) 在此 Socket 上设置的值。
return |
已经设置的流量类别或服务类型 | Throws | SocketException:
如果获取流量类别或服务类型值时出现错误。 | since | 1.4 | See also | |