- java.lang.Object
-
- java.net.Socket
-
- All Implemented Interfaces:
-
Closeable,AutoCloseable
- 已知直接子类:
-
SSLSocket
public class Socket extends Object implements Closeable
该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。套接字的实际工作由
SocketImpl类的实例执行。 应用程序通过更改创建套接字实现的套接字工厂,可以配置自己创建适合本地防火墙的套接字。- 从以下版本开始:
- 1.0
- 另请参见:
-
setSocketImplFactory(java.net.SocketImplFactory),SocketImpl,SocketChannel
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 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。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 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。
-
-
-
构造方法详细信息
-
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
- 另请参见:
-
ProxySelector,Proxy
-
-
Socket
protected Socket(SocketImpl impl) throws SocketException
使用用户指定的SocketImpl创建一个未连接的Socket。- 参数
-
impl- 子类希望在Socket上使用的 SocketImpl的实例。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.1
-
Socket
public Socket(String host, int port) throws UnknownHostException, IOException
创建流套接字并将其连接到指定主机上的指定端口号。如果指定的主机是
null,则相当于指定地址为InetAddress.getByName(null)。 换句话说,它相当于指定回送接口的地址。如果应用程序指定了服务器套接字工厂,则会调用该工厂的
createSocketImpl方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。如果有一个安全管理器,它的
checkConnect方法被调用主机地址和port作为其参数。 这可能会导致SecurityException。- 参数
-
host- 主机名,或null的环回地址。 -
port- 端口号。 - 异常
-
UnknownHostException- 如果无法确定主机的IP地址。 -
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果存在安全管理员,并且其checkConnect方法不允许操作。 -
IllegalArgumentException- 如果端口参数超出指定的有效端口值范围(介于0和65535之间),包括0和65535之间。 - 另请参见:
-
setSocketImplFactory(java.net.SocketImplFactory),SocketImpl,SocketImplFactory.createSocketImpl(),SecurityManager.checkConnect(java.lang.String, int)
-
Socket
public Socket(InetAddress address, int port) throws IOException
创建流套接字并将其连接到指定IP地址的指定端口号。如果应用程序指定了套接字工厂,则会调用该工厂的
createSocketImpl方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。如果有一个安全管理器,它的
checkConnect方法被调用主机地址和port作为其参数。 这可能会导致SecurityException。- 参数
-
address- IP地址。 -
port- 端口号。 - 异常
-
IOException- 如果在创建套接字时发生I / O错误。 -
SecurityException- 如果安全管理器存在,并且其checkConnect方法不允许操作。 -
IllegalArgumentException- 如果端口参数超出了指定的有效端口值范围(介于0到65535之间)。 -
NullPointerException- 如果address为空。 - 另请参见:
-
setSocketImplFactory(java.net.SocketImplFactory),SocketImpl,SocketImplFactory.createSocketImpl(),SecurityManager.checkConnect(java.lang.String, int)
-
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-本地地址的套接字绑定到,或null为anyLocal地址。 -
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-本地地址的套接字绑定到,或null为anyLocal地址。 -
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),SocketImpl,SocketImplFactory.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),SocketImpl,SocketImplFactory.createSocketImpl(),SecurityManager.checkConnect(java.lang.String, int)
-
-
方法详细信息
-
connect
public void connect(SocketAddress endpoint) throws IOException
将此套接字连接到服务器。- 参数
-
endpoint-SocketAddress - 异常
-
IOException- 如果在连接期间发生错误 -
IllegalBlockingModeException- 如果此套接字具有关联的通道,并且通道处于非阻塞模式 -
IllegalArgumentException- 如果端点为空或是此套接字不支持的SocketAddress子类 - 从以下版本开始:
- 1.4
-
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表示的端点的InetSocketAddress为closed,则该方法将在套接字关闭后继续返回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.open或ServerSocketChannel.accept方法创建的,则套接字将具有通道。- 结果
-
与此套接字关联的套接字通道,如果此通道未创建此套接字,
null - 从以下版本开始:
- 1.4
-
getInputStream
public InputStream getInputStream() throws IOException
返回此套接字的输入流。如果此套接字具有相关联的通道,则所得到的输入流将其所有操作委派给通道。 如果通道处于非阻塞模式,那么输入流的
read操作将会抛出一个IllegalBlockingModeException。在异常情况下,远程主机或网络软件可能会破坏底层连接(例如TCP连接情况下的连接重置)。 当网络软件检测到断开的连接时,以下内容适用于返回的输入流:
网络软件可以丢弃由套接字缓冲的字节。 不能被网络软件丢弃的字节可以使用
read读取。如果在套接字上没有字节缓冲,或者所有缓冲字节已被
read消耗掉,那么对read的所有后续调用将抛出一个IOException。
关闭返回的
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()
-
getTcpNoDelay
public boolean getTcpNoDelay() throws SocketException测试是否启用了TCP_NODELAY。- 结果
-
一个
boolean指示是否TCP_NODELAY启用。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.1
- 另请参见:
-
setTcpNoDelay(boolean)
-
setSoLinger
public void setSoLinger(boolean on, int linger) throws SocketException- 参数
-
on- 是否on来 -
linger- 如果是真的,多久才能停留。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 -
IllegalArgumentException- 如果IllegalArgumentException值为负数。 - 从以下版本开始:
- 1.1
- 另请参见:
-
getSoLinger()
-
getSoLinger
public int getSoLinger() throws SocketException- 结果
-
设置为
SO_LINGER。 - 异常
-
SocketException- 如果底层协议有错误,例如TCP错误。 - 从以下版本开始:
- 1.1
- 另请参见:
-
setSoLinger(boolean, int)
-
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_OOBINLINE,false禁用。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
getOOBInline()
-
getOOBInline
public boolean getOOBInline() throws SocketException测试是否启用了SO_OOBINLINE。- 结果
-
一个
boolean指示是否SO_OOBINLINE启用。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
setOOBInline(boolean)
-
setSoTimeout
public void setSoTimeout(int timeout) throws SocketException启用/禁用SO_TIMEOUT与指定的超时,以毫秒为单位。 使用此选项设置为非零超时时,与此Socket相关联的InputStream上的read()调用将仅阻止此时间。 如果超时超时,则引发java.net.SocketTimeoutException ,尽管Socket仍然有效。 必须先启用该选项才能进入阻止操作才能生效。 超时时间必须为> 0。 超时为零被解释为无限超时。- 参数
-
timeout- 指定的超时时间,以毫秒为单位。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.1
- 另请参见:
-
getSoTimeout()
-
getSoTimeout
public int getSoTimeout() throws SocketException退货设置为SO_TIMEOUT。 0返回意味着该选项被禁用(即无限超时)。- 结果
-
设置为
SO_TIMEOUT - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.1
- 另请参见:
-
setSoTimeout(int)
-
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。 - 异常
-
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,则必须在套接字连接到远程对等体之前请求。 有两种情况需要注意:- 对于从ServerSocket接受的套接字,必须通过在ServerSocket绑定到本地地址之前调用
ServerSocket.setReceiveBufferSize(int)来完成。 - 对于客户端套接字,在将套接字连接到其远程对等体之前,必须调用setReceiveBufferSize()。
- 参数
-
size- 设置接收缓冲区大小的大小。 该值必须大于0。 - 异常
-
IllegalArgumentException- 如果值为0或为负数。 -
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.2
- 另请参见:
-
getReceiveBufferSize(),ServerSocket.setReceiveBufferSize(int)
- 对于从ServerSocket接受的套接字,必须通过在ServerSocket绑定到本地地址之前调用
-
getReceiveBufferSize
public int getReceiveBufferSize() throws SocketException- 结果
-
该值为
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()
-
getKeepAlive
public boolean getKeepAlive() throws SocketException测试是否启用了SO_KEEPALIVE。- 结果
-
一个
boolean指示是否SO_KEEPALIVE启用。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.3
- 另请参见:
-
setKeepAlive(boolean)
-
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)
在优先级字段中设置位可能会导致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()
-
getReuseAddress
public boolean getReuseAddress() throws SocketException测试是否启用了SO_REUSEADDR。- 结果
-
一个
boolean指示是否SO_REUSEADDR启用。 - 异常
-
SocketException- 如果底层协议有错误,如TCP错误。 - 从以下版本开始:
- 1.4
- 另请参见:
-
setReuseAddress(boolean)
-
close
public void close() throws IOException关闭此套接字。任何线程当前被阻塞在这个套接字上的I / O操作将抛出一个
SocketException。一旦一个套接字被关闭,它不可用于进一步的网络使用(即不能重新连接或反弹)。 需要创建一个新的套接字。
关闭此插座也将关闭插座的
InputStream和OutputStream。如果此套接字具有关联的通道,则通道也将关闭。
- 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()
-
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
-
-