模块  java.base
软件包  java.net

Class Socket

    • 构造方法详细信息

      • 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
        另请参见:
        ProxySelectorProxy
      • Socket

        protected Socket​(SocketImpl impl)          throws SocketException
        使用用户指定的SocketImpl创建未连接的Socket。
        参数
        impl - 子类希望在Socket上使用的 SocketImpl实例。
        异常
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        从以下版本开始:
        1.1
      • 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 - 套接字绑定的本地地址,或 nullanyLocal地址。
        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 -本地地址的套接字绑定到,或 nullanyLocal地址。
        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

        @Deprecatedpublic 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)SocketImplSocketImplFactory.createSocketImpl()SecurityManager.checkConnect(java.lang.String, int)
      • Socket

        @Deprecatedpublic 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)SocketImplSocketImplFactory.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()
        返回此套接字绑定的本地端口号。

        如果套接字在closed之前被绑定 ,则此方法将在套接字关闭后继续返回本地端口号。

        结果
        此套接字绑定到的本地端口号,如果尚未绑定套接字,则返回-1。
      • getRemoteSocketAddress

        public SocketAddress getRemoteSocketAddress()
        返回此套接字连接到的端点的地址,如果未连接,则null

        如果套接字在closed之前已连接,则此方法将在套接字关闭后继续返回连接的地址。

        结果
        SocketAddress表示此套接字的远程端点,如果尚未连接, null
        从以下版本开始:
        1.4
        另请参见:
        getInetAddress()getPort()connect(SocketAddress, int)connect(SocketAddress)
      • getLocalSocketAddress

        public SocketAddress getLocalSocketAddress()
        返回此套接字绑定的端点的地址。

        如果绑定到InetSocketAddress表示的端点的InetSocketAddressclosed ,则此方法将在套接字关闭后继续返回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.openServerSocketChannel.accept方法创建时,套接字才会有通道。

        结果
        与此套接字关联的套接字通道,如果未为通道创建此套接字, null
        从以下版本开始:
        1.4
      • getInputStream

        public InputStream getInputStream()                           throws IOException
        返回此套接字的输入流。

        如果此套接字具有关联的通道,则生成的输入流将其所有操作委托给通道。 如果通道处于非阻塞模式,则输入流的read操作将抛出IllegalBlockingModeException

        在异常情况下,远程主机或网络软件可能会破坏底层连接(例如TCP连接时的连接重置)。 当网络软件检测到断开连接时,以下内容适用于返回的输入流: -

        • 网络软件可以丢弃由套接字缓冲的字节。 可以使用read读取未被网络软件丢弃的字节。

        • 如果套接字上没有缓冲的字节,或者read消耗了所有缓冲的字节,则对read所有后续调用将抛出IOException

        • 如果套接字上没有缓冲字节,并且套接字尚未使用close关闭,则available将返回0

        关闭返回的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()
      • setSoLinger

        public void setSoLinger​(boolean on,                        int linger)                 throws SocketException
        使用指定的延迟时间(以秒为单位)启用/禁用SO_LINGER 最大超时值是特定于平台的。 该设置仅影响套接字关闭。
        参数
        on - 是否留在上面。
        linger - 如果是真的,可以徘徊多长时间。
        异常
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        IllegalArgumentException - 如果值为负值。
        从以下版本开始:
        1.1
        另请参见:
        getSoLinger()
      • 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_OOBINLINEfalse禁用。
        异常
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        从以下版本开始:
        1.4
        另请参见:
        getOOBInline()
      • setSoTimeout

        public void setSoTimeout​(int timeout)                  throws SocketException
        使用指定的超时启用/禁用SO_TIMEOUT ,以毫秒为单位。 如果将此选项设置为非零超时,则与此Socket关联的InputStream上的read()调用将仅阻止这段时间。 如果超时到期,则引发java.net.SocketTimeoutException ,尽管Socket仍然有效。 必须在进入阻止操作之前启用该选项才能生效。 超时时间必须为> 0 超时为零被解释为无限超时。
        参数
        timeout - 指定的超时,以毫秒为单位。
        异常
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        从以下版本开始:
        1.1
        另请参见:
        getSoTimeout()
      • 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 ,所使用的平台,输出这个缓冲区的大小 Socket
        结果
        SocketSO_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的接收窗口,则必须在套接字连接到远程对等方之前请求此方法。 有两种情况需要注意:

        1. 对于从ServerSocket接受的套接字,必须在ServerSocket绑定到本地地址之前调用ServerSocket.setReceiveBufferSize(int)
        2. 对于客户端套接字,必须在将套接字连接到其远程对等方之前调用setReceiveBufferSize()。
        参数
        size - 设置接收缓冲区大小的大小。 该值必须大于0。
        异常
        IllegalArgumentException - 如果值为0或为负数。
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        从以下版本开始:
        1.2
        另请参见:
        getReceiveBufferSize()ServerSocket.setReceiveBufferSize(int)
      • getReceiveBufferSize

        public int getReceiveBufferSize()                         throws SocketException
        获取此 SocketSO_RCVBUF选项的值,该值是平台在此 Socket上用于输入的缓冲区大小。
        结果
        SocketSO_RCVBUF选项的值。
        异常
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        从以下版本开始:
        1.2
        另请参见:
        setReceiveBufferSize(int)
      • setKeepAlive

        public void setKeepAlive​(boolean on)                  throws SocketException
        启用/禁用 SO_KEEPALIVE
        参数
        on - 是否打开套接字保持活动状态。
        异常
        SocketException - 如果底层协议中存在错误,例如TCP错误。
        从以下版本开始:
        1.3
        另请参见:
        getKeepAlive()
      • 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)
        始终忽略最后一个低位,因为这对应于MBZ(必须为零)位。

        在优先级字段中设置位可能会导致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
      • 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()
      • close

        public void close()           throws IOException
        关闭此套接字。

        当前在此套接字上的I / O操作中阻塞的任何线程将抛出SocketException

        一旦套接字关闭,它就无法用于进一步的网络连接(即无法重新连接或反弹)。 需要创建一个新的套接字。

        关闭此套接字也将关闭套接字InputStreamOutputStream

        如果此套接字具有关联的通道,则通道也将关闭。

        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()
      • toString

        public String toString()
        将此套接字转换为 String
        重写:
        toString在类 Object
        结果
        此套接字的字符串表示形式。
      • 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
      • 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