Most visited

Recently visited

Added in API level 1

Socket

public class Socket
extends Object implements Closeable

java.lang.Object
   ↳ java.net.Socket
Known Direct Subclasses


这个类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通信的端点。

套接字的实际工作由SocketImpl类的一个实例执行。 通过更改创建套接字实现的套接字工厂,应用程序可以将自身配置为创建适合本地防火墙的套接字。

也可以看看:

Summary

Public constructors

Socket()

使用系统默认类型的SocketImpl创建一个未连接的套接字。

Socket(Proxy proxy)

创建一个未连接的套接字,指定应该使用的代理类型(如果有),而不管其他设置如何。

Socket(String host, int port)

创建一个流套接字并将其连接到指定主机上的指定端口号。

Socket(InetAddress address, int port)

创建一个流套接字并将其连接到指定IP地址的指定端口号。

Socket(String host, int port, InetAddress localAddr, int localPort)

创建套接字并将其连接到指定远程端口上的指定远程主机。

Socket(InetAddress address, int port, InetAddress localAddr, int localPort)

创建套接字并将其连接到指定远程端口上的指定远程地址。

Socket(String host, int port, boolean stream)

此构造函数在API级别1中已弃用。使用DatagramSocket代替UDP传输。

Socket(InetAddress host, int port, boolean stream)

此构造函数在API级别1中已弃用。使用DatagramSocket代替UDP传输。

Protected constructors

Socket(SocketImpl impl)

用用户指定的SocketImpl创建一个未连接的Socket。

Public methods

void bind(SocketAddress bindpoint)

将套接字绑定到本地地址。

void close()

关闭此插座。

void connect(SocketAddress endpoint, int timeout)

用指定的超时值将此套接字连接到服务器。

void connect(SocketAddress endpoint)

将此套接字连接到服务器。

SocketChannel getChannel()

返回与此套接字关联的唯一 SocketChannel对象(如果有)。

InetAddress getInetAddress()

返回套接字连接的地址。

InputStream getInputStream()

返回此套接字的输入流。

boolean getKeepAlive()

测试是否启用SO_KEEPALIVE。

InetAddress getLocalAddress()

获取套接字绑定到的本地地址。

int getLocalPort()

返回此套接字绑定到的本地端口号。

SocketAddress getLocalSocketAddress()

返回此套接字绑定的端点的地址,如果尚未绑定,则 null

boolean getOOBInline()

测试是否启用OOBINLINE。

OutputStream getOutputStream()

返回此套接字的输出流。

int getPort()

返回此套接字连接到的远程端口号。

int getReceiveBufferSize()

获取此 Socket的SO_RCVBUF选项的值,即此平台在此 Socket上用于输入的缓冲区大小。

SocketAddress getRemoteSocketAddress()

返回此套接字连接的端点的地址,如果未连接,则 null

boolean getReuseAddress()

测试SO_REUSEADDR是否启用。

int getSendBufferSize()

获取此 Socket的SO_SNDBUF选项的值,即平台在此 Socket上用于输出的缓冲区大小。

int getSoLinger()

返回SO_LINGER的设置。

int getSoTimeout()

返回SO_TIMEOUT的设置。

boolean getTcpNoDelay()

测试是否启用TCP_NODELAY。

int getTrafficClass()

从此套接字发送的数据包的IP头中获取流量类别或服务类型

由于底层网络实现可能会忽略使用 setTrafficClass(int)的流量类别或服务类型集合, setTrafficClass(int)此方法可能会返回与先前在此Socket上使用 setTrafficClass(int)方法设置的值不同的值。

boolean isBound()

返回套接字的绑定状态。

boolean isClosed()

返回套接字的关闭状态。

boolean isConnected()

返回套接字的连接状态。

boolean isInputShutdown()

返回是否关闭套接字连接的半读。

boolean isOutputShutdown()

返回是否关闭了套接字连接的写入一半。

void sendUrgentData(int data)

在套接字上发送一个字节的紧急数据。

void setKeepAlive(boolean on)

启用/禁用SO_KEEPALIVE。

void setOOBInline(boolean on)

启用/禁用OOBINLINE(接收TCP紧急数据)默认情况下,此选项被禁用,并且套接字上收到的TCP紧急数据将被静默丢弃。

void setPerformancePreferences(int connectionTime, int latency, int bandwidth)

为此套接字设置性能首选项。

void setReceiveBufferSize(int size)

将SO_RCVBUF选项设置为此 Socket的指定值。

void setReuseAddress(boolean on)

启用/禁用SO_REUSEADDR套接字选项。

void setSendBufferSize(int size)

将SO_SNDBUF选项设置为此 Socket的指定值。

void setSoLinger(boolean on, int linger)

使用指定的逗留时间(以秒为单位)启用/禁用SO_LINGER。

void setSoTimeout(int timeout)

使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。

static void setSocketImplFactory(SocketImplFactory fac)

为应用程序设置客户端套接字实现工厂。

void setTcpNoDelay(boolean on)

启用/禁用TCP_NODELAY(禁用/启用Nagle的算法)。

void setTrafficClass(int tc)

为从此Socket发送的数据包设置IP头中的流量类别或服务类型八位字节。

void shutdownInput()

将此套接字的输入流置于“流尾”。

void shutdownOutput()

禁用此套接字的输出流。

String toString()

将此套接字转换为 String

Inherited methods

From class java.lang.Object
From interface java.io.Closeable
From interface java.lang.AutoCloseable

Public constructors

Socket

Added in API level 1
Socket ()

使用系统默认类型的SocketImpl创建一个未连接的套接字。

Socket

Added in API level 1
Socket (Proxy proxy)

创建一个未连接的套接字,指定应该使用的代理类型(如果有),而不管其他设置如何。

如果有安全管理器,则使用代理主机地址和端口号作为其参数调用其checkConnect方法。 这可能会导致SecurityException。

例子:

  • Socket s = new Socket(Proxy.NO_PROXY); will create a plain socket ignoring any other proxy configuration.
  • Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080))); will create a socket connecting through the specified SOCKS proxy server.

Parameters
proxy Proxy: a Proxy object specifying what kind of proxying should be used.
Throws
IllegalArgumentException if the proxy is of an invalid type or null.
SecurityException if a security manager is present and permission to connect to the proxy is denied.

也可以看看:

Socket

Added in API level 1
Socket (String host, 
                int port)

创建一个流套接字并将其连接到指定主机上的指定端口号。

如果指定的主机是null ,则相当于将地址指定为InetAddress.getByName(null) 换句话说,它等同于指定回送接口的地址。

如果应用程序指定了一个服务器套接字工厂,那么将调用该工厂的createSocketImpl方法来创建实际的套接字实现。 否则,会创建一个“普通”套接字。

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

Parameters
host String: the host name, or null for the loopback address.
port int: the port number.
Throws
UnknownHostException if the IP address of the host could not be determined.
IOException if an I/O error occurs when creating the socket.
SecurityException if a security manager exists and its checkConnect method doesn't allow the operation.
IllegalArgumentException if the port parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive.

也可以看看:

Socket

Added in API level 1
Socket (InetAddress address, 
                int port)

创建一个流套接字并将其连接到指定IP地址的指定端口号。

如果应用程序指定了一个套接字工厂,那么将调用该工厂的createSocketImpl方法来创建实际的套接字实现。 否则,会创建一个“普通”套接字。

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

Parameters
address InetAddress: the IP address.
port int: the port number.
Throws
IOException if an I/O error occurs when creating the socket.
SecurityException if a security manager exists and its checkConnect method doesn't allow the operation.
IllegalArgumentException if the port parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive.
NullPointerException if address is null.

也可以看看:

Socket

Added in API level 1
Socket (String host, 
                int port, 
                InetAddress localAddr, 
                int localPort)

创建套接字并将其连接到指定远程端口上的指定远程主机。 Socket还将bind()提供给本地地址和端口。

如果指定的主机是null ,则相当于将地址指定为InetAddress.getByName(null) 换句话说,它等同于指定回送接口的地址。

本地端口号 zero将让系统在 bind操作中选取一个空闲端口。

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

Parameters
host String: the name of the remote host, or null for the loopback address.
port int: the remote port
localAddr InetAddress: the local address the socket is bound to, or null for the anyLocal address.
localPort int: the local port the socket is bound to, or zero for a system selected free port.
Throws
IOException if an I/O error occurs when creating the socket.
SecurityException if a security manager exists and its checkConnect method doesn't allow the operation.
IllegalArgumentException if the port parameter or localPort parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive.

也可以看看:

Socket

Added in API level 1
Socket (InetAddress address, 
                int port, 
                InetAddress localAddr, 
                int localPort)

创建套接字并将其连接到指定远程端口上的指定远程地址。 Socket还将bind()提供给本地地址和端口。

如果指定的本地地址是 null ,则相当于将地址指定为AnyLocal地址(请参阅 InetAddress.isAnyLocalAddress() )。

本地端口号 zero将使系统获取 bind操作中的空闲端口。

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

Parameters
address InetAddress: the remote address
port int: the remote port
localAddr InetAddress: the local address the socket is bound to, or null for the anyLocal address.
localPort int: the local port the socket is bound to or zero for a system selected free port.
Throws
IOException if an I/O error occurs when creating the socket.
SecurityException if a security manager exists and its checkConnect method doesn't allow the operation.
IllegalArgumentException if the port parameter or localPort parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive.
NullPointerException if address is null.

也可以看看:

Socket

Added in API level 1
Socket (String host, 
                int port, 
                boolean stream)

此构造函数在API级别1中已弃用。
使用DatagramSocket代替UDP传输。

创建一个流套接字并将其连接到指定主机上的指定端口号。

如果指定的主机是null ,则相当于将地址指定为InetAddress.getByName(null) 换句话说,它等同于指定回送接口的地址。

如果流参数是true ,则会创建一个流套接字。 如果流参数是false ,它会创建一个数据报套接字。

如果应用程序指定了一个服务器套接字工厂,那么将调用该工厂的createSocketImpl方法来创建实际的套接字实现。 否则,会创建一个“普通”套接字。

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

如果使用UDP套接字,则TCP / IP相关套接字选项将不适用。

Parameters
host String: the host name, or null for the loopback address.
port int: the port number.
stream boolean: a boolean indicating whether this is a stream socket or a datagram socket.
Throws
IOException if an I/O error occurs when creating the socket.
SecurityException if a security manager exists and its checkConnect method doesn't allow the operation.
IllegalArgumentException if the port parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive.

也可以看看:

Socket

Added in API level 1
Socket (InetAddress host, 
                int port, 
                boolean stream)

此构造函数在API级别1中已弃用。
使用DatagramSocket代替UDP传输。

创建一个套接字并将其连接到指定IP地址的指定端口号。

如果流参数是true ,则会创建一个流套接字。 如果流参数是false ,它将创建一个数据报套接字。

如果应用程序指定了服务器套接字工厂,则调用该工厂的createSocketImpl方法来创建实际的套接字实现。 否则,会创建一个“普通”套接字。

如果有安全管理器, checkConnect host.getHostAddress()port作为参数调用其checkConnect方法。 这可能会导致SecurityException。

如果使用UDP套接字,则TCP / IP相关的套接字选项将不适用。

Parameters
host InetAddress: the IP address.
port int: the port number.
stream boolean: if true, create a stream socket; otherwise, create a datagram socket.
Throws
IOException if an I/O error occurs when creating the socket.
SecurityException if a security manager exists and its checkConnect method doesn't allow the operation.
IllegalArgumentException if the port parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive.
NullPointerException if host is null.

也可以看看:

Protected constructors

Socket

Added in API level 1
Socket (SocketImpl impl)

用用户指定的SocketImpl创建一个未连接的Socket。

Parameters
impl SocketImpl: an instance of a SocketImpl the subclass wishes to use on the Socket.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

Public methods

bind

Added in API level 1
void bind (SocketAddress bindpoint)

将套接字绑定到本地地址。

如果地址是 null ,那么系统将选择一个临时端口和一个有效的本地地址来绑定套接字。

Parameters
bindpoint SocketAddress: the SocketAddress to bind to
Throws
IOException if the bind operation fails, or if the socket is already bound.
IllegalArgumentException if bindpoint is a SocketAddress subclass not supported by this socket

也可以看看:

close

Added in API level 1
void close ()

关闭此插座。

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

套接字关闭后,它不能用于进一步的网络使用(即不能重新连接或反弹)。 需要创建一个新的套接字。

关闭此插座也将关闭插座的 InputStreamOutputStream

如果此套接字具有关联的通道,那么该通道也会关闭。

Throws
IOException if an I/O error occurs when closing this socket.

也可以看看:

connect

Added in API level 1
void connect (SocketAddress endpoint, 
                int timeout)

用指定的超时值将此套接字连接到服务器。 超时为零被解释为无限超时。 连接将阻塞直到建立或发生错误。

Parameters
endpoint SocketAddress: the SocketAddress
timeout int: the timeout value to be used in milliseconds.
Throws
IOException if an error occurs during the connection
SocketTimeoutException if timeout expires before connecting
IllegalBlockingModeException if this socket has an associated channel, and the channel is in non-blocking mode
IllegalArgumentException if endpoint is null or is a SocketAddress subclass not supported by this socket

connect

Added in API level 1
void connect (SocketAddress endpoint)

将此套接字连接到服务器。

Parameters
endpoint SocketAddress: the SocketAddress
Throws
IOException if an error occurs during the connection
IllegalBlockingModeException if this socket has an associated channel, and the channel is in non-blocking mode
IllegalArgumentException if endpoint is null or is a SocketAddress subclass not supported by this socket

getChannel

Added in API level 1
SocketChannel getChannel ()

返回与此套接字关联的唯一 SocketChannel对象(如果有)。

如果且仅当通道本身是通过 SocketChannel.openServerSocketChannel.accept方法创建的,则套接字将具有通道。

Returns
SocketChannel the socket channel associated with this socket, or null if this socket was not created for a channel

getInetAddress

Added in API level 1
InetAddress getInetAddress ()

返回套接字连接的地址。

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

Returns
InetAddress the remote IP address to which this socket is connected, or null if the socket is not connected.

getInputStream

Added in API level 1
InputStream getInputStream ()

返回此套接字的输入流。

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

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

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

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

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

关闭返回的 InputStream将关闭相关的套接字。

Returns
InputStream an input stream for reading bytes from this socket.
Throws
IOException if an I/O error occurs when creating the input stream, the socket is closed, the socket is not connected, or the socket input has been shutdown using shutdownInput()

getKeepAlive

Added in API level 1
boolean getKeepAlive ()

测试是否启用SO_KEEPALIVE。

Returns
boolean a boolean indicating whether or not SO_KEEPALIVE is enabled.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getLocalAddress

Added in API level 1
InetAddress getLocalAddress ()

获取套接字绑定到的本地地址。

Returns
InetAddress the local address to which the socket is bound, or the wildcard address if the socket is closed or not bound yet.

getLocalPort

Added in API level 1
int getLocalPort ()

返回此套接字绑定到的本地端口号。

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

Returns
int the local port number to which this socket is bound or -1 if the socket is not bound yet.

getLocalSocketAddress

Added in API level 1
SocketAddress getLocalSocketAddress ()

返回此套接字绑定的端点的地址,如果尚未绑定,则 null

如果绑定到由InetSocketAddress表示的端点的InetSocketAddressclosed ,那么在套接字关闭后,此方法将继续返回InetSocketAddress 在这种情况下,返回的InetSocketAddress的地址是wildcard地址,其端口是它绑定到的本地端口。

Returns
SocketAddress a SocketAddress representing the local endpoint of this socket, or null if it is not bound yet.

也可以看看:

getOOBInline

Added in API level 1
boolean getOOBInline ()

测试是否启用OOBINLINE。

Returns
boolean a boolean indicating whether or not OOBINLINE is enabled.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getOutputStream

Added in API level 1
OutputStream getOutputStream ()

返回此套接字的输出流。

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

关闭返回的 OutputStream将关闭相关的套接字。

Returns
OutputStream an output stream for writing bytes to this socket.
Throws
IOException if an I/O error occurs when creating the output stream or if the socket is not connected.

getPort

Added in API level 1
int getPort ()

返回此套接字连接到的远程端口号。

如果套接字在 closed之前已连接,那么在套接字关闭后,此方法将继续返回连接的端口号。

Returns
int the remote port number to which this socket is connected, or 0 if the socket is not connected yet.

getReceiveBufferSize

Added in API level 1
int getReceiveBufferSize ()

获取此 Socket的SO_RCVBUF选项的值,即平台在此 Socket上用于输入的缓冲区大小。

Returns
int the value of the SO_RCVBUF option for this Socket.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getRemoteSocketAddress

Added in API level 1
SocketAddress getRemoteSocketAddress ()

返回此套接字连接的端点的地址,如果未连接,则 null

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

Returns
SocketAddress a SocketAddress representing the remote endpoint of this socket, or null if it is not connected yet.

也可以看看:

getReuseAddress

Added in API level 1
boolean getReuseAddress ()

测试SO_REUSEADDR是否启用。

Returns
boolean a boolean indicating whether or not SO_REUSEADDR is enabled.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getSendBufferSize

Added in API level 1
int getSendBufferSize ()

获取此 Socket的SO_SNDBUF选项的值,即此平台在此 Socket上用于输出的缓冲区大小。

Returns
int the value of the SO_SNDBUF option for this Socket.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getSoLinger

Added in API level 1
int getSoLinger ()

返回SO_LINGER的设置。 -1返回意味着该选项被禁用。 该设置仅影响套接字关闭。

Returns
int the setting for SO_LINGER.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getSoTimeout

Added in API level 1
int getSoTimeout ()

返回SO_TIMEOUT的设置。 0返回意味着该选项被禁用(即,无限超时)。

Returns
int the setting for SO_TIMEOUT
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getTcpNoDelay

Added in API level 1
boolean getTcpNoDelay ()

测试是否启用TCP_NODELAY。

Returns
boolean a boolean indicating whether or not TCP_NODELAY is enabled.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getTrafficClass

Added in API level 1
int getTrafficClass ()

从此套接字发送的数据包的IP头中获取流量类别或服务类型

由于底层网络实现可能会忽略使用 setTrafficClass(int)的流量类别或服务类型集合, setTrafficClass(int)此方法可能会返回与先前使用此Socket上的 setTrafficClass(int)方法设置的值不同的值。

Returns
int the traffic class or type-of-service already set
Throws
SocketException if there is an error obtaining the traffic class or type-of-service value.

也可以看看:

isBound

Added in API level 1
boolean isBound ()

返回套接字的绑定状态。

注意:关闭套接字不会清除其绑定状态,这意味着如果在关闭之前它成功绑定,此方法将为封闭套接字返回 true (请参阅 isClosed() )。

Returns
boolean true if the socket was successfuly bound to an address

也可以看看:

isClosed

Added in API level 1
boolean isClosed ()

返回套接字的关闭状态。

Returns
boolean true if the socket has been closed

也可以看看:

isConnected

Added in API level 1
boolean isConnected ()

返回套接字的连接状态。

注意:关闭套接字不会清除其连接状态,这意味着如果在关闭套接字之前连接成功,则此方法将为封闭套接字返回 true (请参阅 isClosed() )。

Returns
boolean true if the socket was successfuly connected to a server

isInputShutdown

Added in API level 1
boolean isInputShutdown ()

返回是否关闭套接字连接的半读。

Returns
boolean true if the input of the socket has been shutdown

也可以看看:

isOutputShutdown

Added in API level 1
boolean isOutputShutdown ()

返回是否关闭了套接字连接的写入一半。

Returns
boolean true if the output of the socket has been shutdown

也可以看看:

sendUrgentData

Added in API level 1
void sendUrgentData (int data)

在套接字上发送一个字节的紧急数据。 要发送的字节是数据参数的最低八位。 紧接着的字节在任何之前写入套接字OutputStream之后以及将来写入OutputStream之前发送。

Parameters
data int: The byte of data to send
Throws
IOException if there is an error sending the data.

setKeepAlive

Added in API level 1
void setKeepAlive (boolean on)

启用/禁用SO_KEEPALIVE。

Parameters
on boolean: whether or not to have socket keep alive turned on.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setOOBInline

Added in API level 1
void setOOBInline (boolean on)

启用/禁用OOBINLINE(接收TCP紧急数据)默认情况下,此选项被禁用,并且套接字上收到的TCP紧急数据将被静默丢弃。 如果用户希望接收紧急数据,则必须启用该选项。 启用后,紧急数据将与正常数据内联接收。

请注意,只有有限的支持才能处理传入的紧急数据。 特别是,没有提供传入紧急数据的通知,并且除非由更高级协议提供,否则不能区分正常数据和紧急数据。

Parameters
on boolean: true to enable OOBINLINE, false to disable.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setPerformancePreferences

Added in API level 1
void setPerformancePreferences (int connectionTime, 
                int latency, 
                int bandwidth)

为此套接字设置性能首选项。

套接字默认使用TCP / IP协议。 某些实现可能提供具有与TCP / IP不同的性能特征的替代协议。 该方法允许应用程序表达自己的偏好,以便在实现从可用协议中选择时如何进行这些折衷。

性能首选项由三个整数描述,其值表示短连接时间,低延迟和高带宽的相对重要性。 整数的绝对值是无关紧要的; 为了选择一个协议,简单地比较这些值,较大的值表示较强的偏好。 负值表示比正值低的优先级。 例如,如果应用程序比低延迟和高带宽更喜欢短连接时间,则可以使用值(1, 0, 0)来调用此方法。 如果应用程序偏好低延迟以上的高带宽,并且短连接时间以上的延迟较低,则可以使用值(0, 1, 2)调用此方法。

在此套接字连接后调用此方法将不起作用。

Parameters
connectionTime int: An int expressing the relative importance of a short connection time
latency int: An int expressing the relative importance of low latency
bandwidth int: An int expressing the relative importance of high bandwidth

setReceiveBufferSize

Added in API level 1
void setReceiveBufferSize (int size)

将SO_RCVBUF选项设置为此Socket的指定值。 平台的网络代码使用SO_RCVBUF选项作为设置底层网络I / O缓冲区大小的提示。

增加接收缓冲区大小可以提高高容量连接的网络I / O性能,而降低接收缓冲区大小可以帮助减少传入数据的积压。

因为SO_RCVBUF是一个提示,所以想要验证缓冲区大小的应用程序应该调用 getReceiveBufferSize()

SO_RCVBUF的值也用于设置通告给远程对等端的TCP接收窗口。 通常,在连接套接字时,可以随时修改窗口大小。 但是,如果需要大于64K的接收窗口,则必须在套接字连接到远程对等点之前请求该窗口。 有两种情况需要注意:

  1. For sockets accepted from a ServerSocket, this must be done by calling setReceiveBufferSize(int) before the ServerSocket is bound to a local address.

  2. For client sockets, setReceiveBufferSize() must be called before connecting the socket to its remote peer.

Parameters
size int: the size to which to set the receive buffer size. This value must be greater than 0.
Throws
IllegalArgumentException if the value is 0 or is negative.
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setReuseAddress

Added in API level 1
void setReuseAddress (boolean on)

启用/禁用SO_REUSEADDR套接字选项。

当TCP连接关闭时,连接关闭后连接可能会保持超时状态一段时间(通常称为TIME_WAIT状态或2MSL等待状态)。 对于使用众所周知的套接字地址或端口的应用程序,如果在涉及套接字地址或端口的超时状态中存在连接,则可能无法将套接字绑定到所需的SocketAddress

在使用 bind(SocketAddress)绑定套接字之前启用 SO_REUSEADDR允许套接字绑定,即使先前的连接处于超时状态。

创建 Socket时 ,初始设置 SO_REUSEADDR被禁用。

未定义绑定套接字后启用或禁用 SO_REUSEADDR时的行为(请参阅 isBound() )。

Parameters
on boolean: whether to enable or disable the socket option
Throws
SocketException if an error occurs enabling or disabling the SO_RESUEADDR socket option, or the socket is closed.

也可以看看:

setSendBufferSize

Added in API level 1
void setSendBufferSize (int size)

将SO_SNDBUF选项设置为此Socket的指定值。 平台的网络代码使用SO_SNDBUF选项作为设置底层网络I / O缓冲区大小的提示。

因为SO_SNDBUF是一个提示,所以想要验证缓冲区大小的应用程序应该调用 getSendBufferSize()

Parameters
size int: the size to which to set the send buffer size. This value must be greater than 0.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.
IllegalArgumentException if the value is 0 or is negative.

也可以看看:

setSoLinger

Added in API level 1
void setSoLinger (boolean on, 
                int linger)

使用指定的逗留时间(以秒为单位)启用/禁用SO_LINGER。 最大超时值是平台特定的。 该设置仅影响套接字关闭。

Parameters
on boolean: whether or not to linger on.
linger int: how long to linger for, if on is true.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.
IllegalArgumentException if the linger value is negative.

也可以看看:

setSoTimeout

Added in API level 1
void setSoTimeout (int timeout)

使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。 如果将此选项设置为非零超时,则与此Socket关联的InputStream上的read()调用将仅阻塞这段时间。 如果超时过期,则会引发java.net.SocketTimeoutException ,但Socket仍然有效。 该选项必须在进入阻止操作生效之前启用。 超时值必须大于0.超时值为零将被解释为无限超时。

Parameters
timeout int: the specified timeout, in milliseconds.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setSocketImplFactory

Added in API level 1
void setSocketImplFactory (SocketImplFactory fac)

为应用程序设置客户端套接字实现工厂。 工厂只能指定一次。

当应用程序创建新的客户端套接字时,将调用套接字实现工厂的方法 createSocketImpl来创建实际的套接字实现。

除非工厂已经设置,否则将 null传递给该方法是无操作的。

如果有安全管理器,则此方法首先调用安全管理器的方法checkSetFactory以确保允许操作。 这可能会导致SecurityException。

Parameters
fac SocketImplFactory: the desired factory.
Throws
IOException if an I/O error occurs when setting the socket factory.
SocketException if the factory is already defined.
SecurityException if a security manager exists and its checkSetFactory method doesn't allow the operation.

也可以看看:

setTcpNoDelay

Added in API level 1
void setTcpNoDelay (boolean on)

启用/禁用TCP_NODELAY(禁用/启用Nagle的算法)。

Parameters
on boolean: true to enable TCP_NODELAY, false to disable.
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setTrafficClass

Added in API level 1
void setTrafficClass (int tc)

为从此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)
The last low order bit is always ignored as this corresponds to the MBZ (must be zero) bit.

在优先级字段中设置位可能会导致SocketException,表示操作不被允许。

正如RFC 1122第4.2.4.2节所指出的那样,一个兼容的TCP实现应该但并非必须让应用程序在连接的生命周期中更改TOS字段。 因此,建立TCP连接之后服务类型字段是否可以改变取决于底层平台的实现。 应用程序不应该假设他们可以在连接后更改TOS字段。

对于Internet协议版本6 tc是将放置在IP标头的sin6_flowinfo字段中的值。

Parameters
tc int: an int value for the bitset.
Throws
SocketException if there is an error setting the traffic class or type-of-service

也可以看看:

shutdownInput

Added in API level 1
void shutdownInput ()

将此套接字的输入流置于“流尾”。 发送到套接字的输入流一侧的任何数据都会被确认,然后以静默方式丢弃。

如果您在套接字上调用shutdownInput()之后从套接字输入流读取,则该流将返回EOF。

Throws
IOException if an I/O error occurs when shutting down this socket.

也可以看看:

shutdownOutput

Added in API level 1
void shutdownOutput ()

禁用此套接字的输出流。 对于TCP套接字,任何先前写入的数据将在TCP的正常连接终止序列后发送。 如果在套接字上调用shutdownOutput()之后写入套接字输出流,则该流将抛出IOException。

Throws
IOException if an I/O error occurs when shutting down this socket.

也可以看看:

toString

Added in API level 1
String toString ()

将此套接字转换为 String

Returns
String a string representation of this socket.

Hooray!