- 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。
 
-  
             
-  
        
       -  
             构造方法详细信息-  Socketpublic Socket() 创建一个未连接的套接字,系统默认类型为SocketImpl。- 从以下版本开始:
- 1.1
 
 -  Socketpublic 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
 
-  
 -  Socketprotected Socket(SocketImpl impl) throws SocketException 使用用户指定的SocketImpl创建未连接的Socket。- 参数
-  
              impl- 子类希望在Socket上使用的 SocketImpl实例。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.1
 
 -  Socketpublic 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)
 
 -  Socketpublic 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)
 
 -  Socketpublic 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)
 
 -  Socketpublic 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)
 
 
-  
 -  
             方法详细信息-  connectpublic void connect(SocketAddress endpoint) throws IOException 将此套接字连接到服务器。- 参数
-  
              endpoint-SocketAddress
- 异常
-  
              IOException- 如果连接期间发生错误
-  
              IllegalBlockingModeException- 如果此套接字具有关联的通道,并且该通道处于非阻塞模式
-  
              IllegalArgumentException- 如果endpoint为null或者是此套接字不支持的SocketAddress子类
- 从以下版本开始:
- 1.4
 
 -  connectpublic void connect(SocketAddress endpoint, int timeout) throws IOException 使用指定的超时值将此套接字连接到服务器。 超时为零被解释为无限超时。 然后,连接将阻塞,直到建立或发生错误。- 参数
-  
              endpoint-SocketAddress
-  
              timeout- 要使用的超时值,以毫秒为单位。
- 异常
-  
              IOException- 如果连接期间发生错误
-  
              SocketTimeoutException- 如果超时在连接之前到期
-  
              IllegalBlockingModeException- 如果此套接字具有关联的通道,并且该通道处于非阻塞模式
-  
              IllegalArgumentException- 如果endpoint为null或者是此套接字不支持的SocketAddress子类
- 从以下版本开始:
- 1.4
 
 -  bindpublic void bind(SocketAddress bindpoint) throws IOException 将套接字绑定到本地地址。如果地址是 null,则系统将获取临时端口和有效的本地地址以绑定套接字。- 参数
-  
              bindpoint- 要绑定到的SocketAddress
- 异常
-  
              IOException- 如果绑定操作失败,或者套接字已绑定。
-  
              IllegalArgumentException- 如果bindpoint是此套接字不支持的SocketAddress子类
-  
              SecurityException- 如果存在安全管理器且其checkListen方法不允许绑定到本地端口。
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              isBound()
 
 -  getInetAddresspublic InetAddress getInetAddress() 返回套接字连接的地址。如果套接字在 closed之前已连接,则此方法将在套接字关闭后继续返回连接的地址。- 结果
- 
               此套接字连接的远程IP地址,如果未连接套接字, 
              null。
 
 -  getLocalAddresspublic InetAddress getLocalAddress() 获取套接字绑定的本地地址。如果存在安全管理器集,则使用本地地址和 -1作为其参数调用其checkConnect方法,以查看是否允许该操作。 如果不允许该操作,则返回loopback地址。- 结果
- 套接字绑定的本地地址,安全管理器拒绝的环回地址,如果套接字已关闭或尚未绑定,则为通配符地址。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              SecurityManager.checkConnect(java.lang.String, int)
 
 -  getPortpublic int getPort() 返回此套接字连接的远程端口号。如果套接字在 closed之前已连接,则此方法将在套接字关闭后继续返回连接的端口号。- 结果
- 此套接字连接到的远程端口号,如果尚未连接套接字,则为0。
 
 -  getLocalPortpublic int getLocalPort() - 结果
- 此套接字绑定到的本地端口号,如果尚未绑定套接字,则返回-1。
 
 -  getRemoteSocketAddresspublic SocketAddress getRemoteSocketAddress() 返回此套接字连接到的端点的地址,如果未连接,则null。如果套接字在 closed之前已连接,则此方法将在套接字关闭后继续返回连接的地址。- 结果
-  
              SocketAddress表示此套接字的远程端点,如果尚未连接,null。
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              getInetAddress(),getPort(),connect(SocketAddress, int),connect(SocketAddress)
 
 -  getLocalSocketAddresspublic 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)
 
 -  getChannelpublic SocketChannel getChannel() 返回与此套接字关联的唯一SocketChannel对象(如果有)。当且仅当通道本身是通过 SocketChannel.open或ServerSocketChannel.accept方法创建时,套接字才会有通道。- 结果
- 
               与此套接字关联的套接字通道,如果未为通道创建此套接字, 
              null
- 从以下版本开始:
- 1.4
 
 -  getInputStreampublic InputStream getInputStream() throws IOException 返回此套接字的输入流。如果此套接字具有关联的通道,则生成的输入流将其所有操作委托给通道。 如果通道处于非阻塞模式,则输入流的 read操作将抛出IllegalBlockingModeException。在异常情况下,远程主机或网络软件可能会破坏底层连接(例如TCP连接时的连接重置)。 当网络软件检测到断开连接时,以下内容适用于返回的输入流: - 
- 如果套接字上没有缓冲的字节,或者 - read消耗了所有缓冲的字节,则对- read的所有后续调用将抛出- IOException。
 关闭返回的 InputStream将关闭关联的套接字。- 结果
- 用于从此套接字读取字节的输入流。
- 异常
-  
              IOException- 如果在创建输入流时发生I / O错误,则套接字关闭,套接字未连接,或套接字输入已使用shutdownInput()关闭
 
 -  getOutputStreampublic OutputStream getOutputStream() throws IOException 返回此套接字的输出流。如果此套接字具有关联的通道,则生成的输出流将其所有操作委托给通道。 如果通道处于非阻塞模式,则输出流的 write操作将抛出IllegalBlockingModeException。关闭返回的 OutputStream将关闭关联的套接字。- 结果
- 用于将字节写入此套接字的输出流。
- 异常
-  
              IOException- 如果在创建输出流时发生I / O错误或未连接套接字。
 
 -  setTcpNoDelaypublic void setTcpNoDelay(boolean on) throws SocketException启用/禁用TCP_NODELAY(禁用/启用Nagle的算法)。- 参数
-  
              on-true启用TCP_NODELAY,false禁用。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              getTcpNoDelay()
 
 -  getTcpNoDelaypublic boolean getTcpNoDelay() throws SocketException测试是否启用了TCP_NODELAY。- 结果
-  
              boolean指示是否已启用TCP_NODELAY。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              setTcpNoDelay(boolean)
 
 -  setSoLingerpublic void setSoLinger(boolean on, int linger) throws SocketException- 参数
-  
              on- 是否留在上面。
-  
              linger- 如果是真的,可以徘徊多长时间。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
-  
              IllegalArgumentException- 如果值为负值。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              getSoLinger()
 
 -  getSoLingerpublic int getSoLinger() throws SocketException- 结果
-  
              SO_LINGER的设置。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              setSoLinger(boolean, int)
 
 -  sendUrgentDatapublic void sendUrgentData(int data) throws IOException在套接字上发送一个字节的紧急数据。 要发送的字节是数据参数的最低8位。 紧接字节在任何先前写入套接字OutputStream之后以及将来写入OutputStream之前发送。- 参数
-  
              data- 要发送的数据字节
- 异常
-  
              IOException- 如果发送数据时出错。
- 从以下版本开始:
- 1.4
 
 -  setOOBInlinepublic void setOOBInline(boolean on) throws SocketException启用/禁用SO_OOBINLINE(接收TCP紧急数据)默认情况下,禁用此选项并静默丢弃在套接字上接收的TCP紧急数据。 如果用户希望接收紧急数据,则必须启用此选项。 启用后,紧急数据将与正常数据一起接收。请注意,仅提供有限的支持来处理传入的紧急数据。 特别是,没有提供传入紧急数据的通知,除非由更高级别的协议提供,否则无法区分正常数据和紧急数据。 - 参数
-  
              on-true使SO_OOBINLINE,false禁用。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              getOOBInline()
 
 -  getOOBInlinepublic boolean getOOBInline() throws SocketException测试是否启用了SO_OOBINLINE。- 结果
- 
               a 
              boolean指示是否已启用SO_OOBINLINE。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              setOOBInline(boolean)
 
 -  setSoTimeoutpublic void setSoTimeout(int timeout) throws SocketException使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。 如果将此选项设置为非零超时,则与此Socket关联的InputStream上的read()调用将仅阻止这段时间。 如果超时到期,则引发java.net.SocketTimeoutException ,尽管Socket仍然有效。 必须在进入阻止操作之前启用该选项才能生效。 超时时间必须为> 0。 超时为零被解释为无限超时。- 参数
-  
              timeout- 指定的超时,以毫秒为单位。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              getSoTimeout()
 
 -  getSoTimeoutpublic int getSoTimeout() throws SocketException返回SO_TIMEOUT的设置。 0返回意味着该选项被禁用(即无穷大的超时)。- 结果
-  
              SO_TIMEOUT的设置
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.1
- 另请参见:
-  
              setSoTimeout(int)
 
 -  setSendBufferSizepublic 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()
 
 -  getSendBufferSizepublic int getSendBufferSize() throws SocketException- 结果
- 
               此 
              Socket的SO_SNDBUF选项的值。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.2
- 另请参见:
-  
              setSendBufferSize(int)
 
 -  setReceiveBufferSizepublic 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绑定到本地地址之前调用
 -  getReceiveBufferSizepublic int getReceiveBufferSize() throws SocketException- 结果
- 
               此 
              Socket的SO_RCVBUF选项的值。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.2
- 另请参见:
-  
              setReceiveBufferSize(int)
 
 -  setKeepAlivepublic void setKeepAlive(boolean on) throws SocketException启用/禁用SO_KEEPALIVE。- 参数
-  
              on- 是否打开套接字保持活动状态。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.3
- 另请参见:
-  
              getKeepAlive()
 
 -  getKeepAlivepublic boolean getKeepAlive() throws SocketException测试是否启用了SO_KEEPALIVE。- 结果
-  
              boolean指示是否已启用SO_KEEPALIVE。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.3
- 另请参见:
-  
              setKeepAlive(boolean)
 
 -  setTrafficClasspublic 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
 
-  
 -  getTrafficClasspublic int getTrafficClass() throws SocketException获取从此Socket发送的数据包的IP头中的流量类或服务类型由于底层网络实现可能会忽略使用 setTrafficClass(int)的流量类或服务类型集, 因此此方法可能返回与先前在此Socket上使用setTrafficClass(int)方法设置的值不同的值。- 结果
- 已设置的流量类别或服务类型
- 异常
-  
              SocketException- 如果获取流量类或服务类型值时出错。
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              setTrafficClass(int),SocketOptions.IP_TOS
 
 -  setReuseAddresspublic 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()
 
 -  getReuseAddresspublic boolean getReuseAddress() throws SocketException测试是否启用了SO_REUSEADDR。- 结果
-  
              boolean指示是否已启用SO_REUSEADDR。
- 异常
-  
              SocketException- 如果底层协议中存在错误,例如TCP错误。
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              setReuseAddress(boolean)
 
 -  closepublic void close() throws IOException关闭此套接字。当前在此套接字上的I / O操作中阻塞的任何线程将抛出 SocketException。一旦套接字关闭,它就无法用于进一步的网络连接(即无法重新连接或反弹)。 需要创建一个新的套接字。 关闭此套接字也将关闭套接字 InputStream和OutputStream。如果此套接字具有关联的通道,则通道也将关闭。 - Specified by:
-  
              close在界面AutoCloseable
- Specified by:
-  
              close在界面Closeable
- 异常
-  
              IOException- 如果关闭此套接字时发生I / O错误。
- 另请参见:
-  
              isClosed()
 
 -  shutdownInputpublic void shutdownInput() throws IOException将此套接字的输入流放在“流结束”。 发送到套接字输入流端的任何数据都会被确认,然后以静默方式丢弃。如果在套接字上调用此方法后从套接字输入流中读取,则流的 available方法将返回0,其read方法将返回-1(流结束)。- 异常
-  
              IOException- 如果在关闭此套接字时发生I / O错误。
- 从以下版本开始:
- 1.3
- 另请参见:
-  
              shutdownOutput(),close(),setSoLinger(boolean, int),isInputShutdown()
 
 -  shutdownOutputpublic void shutdownOutput() throws IOException禁用此套接字的输出流。 对于TCP套接字,将发送任何先前写入的数据,然后发送TCP的正常连接终止序列。 如果在套接字上调用shutdownOutput()之后写入套接字输出流,则流将抛出IOException。- 异常
-  
              IOException- 如果在关闭此套接字时发生I / O错误。
- 从以下版本开始:
- 1.3
- 另请参见:
-  
              shutdownInput(),close(),setSoLinger(boolean, int),isOutputShutdown()
 
 -  isConnectedpublic boolean isConnected() 返回套接字的连接状态。注意:关闭套接字不会清除其连接状态,这意味着如果在关闭之前成功连接,则此方法将为已关闭的套接字返回 true(请参阅isClosed())。- 结果
- 如果套接字已成功连接到服务器,则为true
- 从以下版本开始:
- 1.4
 
 -  isBoundpublic boolean isBound() 返回套接字的绑定状态。注意:关闭套接字不会清除其绑定状态,这意味着如果关闭套接字在关闭之前成功绑定,则此方法将返回 true(请参阅isClosed())。- 结果
- 如果套接字已成功绑定到某个地址,则为true
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              bind(java.net.SocketAddress)
 
 -  isClosedpublic boolean isClosed() 返回套接字的关闭状态。- 结果
- 如果套接字已关闭,则为true
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              close()
 
 -  isInputShutdownpublic boolean isInputShutdown() 返回套接字连接的读半部分是否已关闭。- 结果
- 如果套接字的输入已关闭,则为true
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              shutdownInput()
 
 -  isOutputShutdownpublic boolean isOutputShutdown() 返回套接字连接的写半部分是否已关闭。- 结果
- 如果套接字的输出已关闭,则为true
- 从以下版本开始:
- 1.4
- 另请参见:
-  
              shutdownOutput()
 
 -  setSocketImplFactorypublic static void setSocketImplFactory(SocketImplFactory fac) throws IOException 设置应用程序的客户端套接字实现工厂。 工厂只能指定一次。当应用程序创建新的客户端套接字时,将调用套接字实现工厂的 createSocketImpl方法来创建实际的套接字实现。除非工厂已经设置,否则将 null传递给该方法是无操作的。如果有安全管理器,则此方法首先调用安全管理器的 checkSetFactory方法以确保允许操作。 这可能会导致SecurityException。- 参数
-  
              fac- 所需的工厂。
- 异常
-  
              IOException- 如果在设置套接字工厂时发生I / O错误。
-  
              SocketException- 如果已定义工厂。
-  
              SecurityException- 如果存在安全管理器且其checkSetFactory方法不允许该操作。
- 另请参见:
-  
              SocketImplFactory.createSocketImpl(),SecurityManager.checkSetFactory()
 
 -  setPerformancePreferencespublic 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
 
 -  setOptionpublic <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
 
 -  getOptionpublic <T> T getOption(SocketOption<T> name) throws IOException 返回套接字选项的值。- 参数类型
-  
              T- 套接字选项值的类型
- 参数
-  
              name- 套接字选项
- 结果
- 套接字选项的值。
- 异常
-  
              UnsupportedOperationException- 如果套接字不支持该选项。
-  
              IOException- 如果发生I / O错误,或者套接字已关闭。
-  
              NullPointerException- 如果名称是null
-  
              SecurityException- 如果设置了安全管理器,并且套接字选项需要安全权限,并且调用者没有所需的权限。StandardSocketOptions不需要任何安全权限。
- 从以下版本开始:
- 9
 
 -  supportedOptionspublic Set<SocketOption<?>> supportedOptions() 返回此套接字支持的一组套接字选项。 即使在套接字关闭后,此方法仍将继续返回选项集。- 结果
- 此套接字支持的一组套接字选项。 如果无法创建套接字的SocketImpl,则此set可能为空。
- 从以下版本开始:
- 9
 
 
-  
 
-