Module  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操作中接收一个空闲端口。

        如果有一个安全管理器,它的checkConnect方法被调用主机地址和port作为其参数。 这可能会导致SecurityException。

        参数
        host - 远程主机的名称,或 null的环回地址。
        port - 远程端口
        localAddr -本地地址的套接字绑定到,或 nullanyLocal地址。
        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 -本地地址的套接字绑定到,或 nullanyLocal地址。
        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)SocketImplSocketImplFactory.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)SocketImplSocketImplFactory.createSocketImpl()SecurityManager.checkConnect(java.lang.String, int)
    • 方法详细信息

      • 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表示的端点的InetSocketAddressclosed ,则该方法将在套接字关闭后继续返回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.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 - 是否 on
        linger - 如果是真的,多久才能停留。
        异常
        SocketException - 如果底层协议有错误,如TCP错误。
        IllegalArgumentException - 如果 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
        获取此 SocketSO_SNDBUF选项的值,即该平台用于在此 Socket上输出的缓冲区大小。
        结果
        该值为 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,则必须在套接字连接到远程对等体之前请求。 有两种情况需要注意:

        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上输入的缓冲区大小。
        结果
        该值为 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()
      • 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 - 一个 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()
      • 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
        重写:
        toStringObject
        结果
        这个套接字的字符串表示形式。
      • 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