JAVASocket的可选项有哪些
这篇文章将为大家详细讲解有关JAVA Socket的可选项有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联公司自2013年创立以来,先为纳溪等服务建站,纳溪等地企业,进行企业商务咨询服务。为纳溪企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
Socket选项指定了Java Socket类所依赖的原生socket如何发送和接收数据。对于客户端Socket,Java支持9个选项:
TCP_NODELAY
SO_BINDADDR
SO_TIMEOUT
SO_LINGER
SO_SNDBUF
SO_RCVBUF
SO_KEEPALIVE
OOBINLINE
IP_TOS
TCP_NODELAY
public void setTcpNoDelay(boolean on) throws SocketException
public boolean getTcpNoDelay() throws SocketException
设置TCP_NODELAY为true可确保包会尽可能快地发送,而无论包的大小。
setTcpNoDelay(true)关闭了Socket的缓冲。setTcpNoDelay(false)再次启用缓冲!
缓冲关闭时,getTcpNoDelay()会返回true,如果缓冲打开,这个方法会返回false;
SO_LINGER
public void setSoLinger(boolean on, int linger) throws SocketException
public int getSoLinger() throws SocketException
SO_LINGER选项指定了Socket关闭时如何处理尚未发送的数据。默认情况下,close()方法将立即返回,但系统仍会尝试发送剩余的数据。如果延迟时间设置为0,那么当Socket关闭时,所有未发送的数据包都将被丢弃。如果SO_LINGER打开而且延迟时间设置为任意正数,close()方法会阻塞,等待发送数据和接收确认。当过去相应秒数后,Socket关闭,所有剩余的数据都不会发送,也不会收到确认!
SO_TIMEOUT
public synchronized void setSoTimeout(int timeout) throws SocketException
public synchronized int getSoTimeout() throws SocketException
正常情况下,尝试从Socket读取数据时,read()调用尽可能长的时间来得到足够的字节。设置SO_TIMEOUT可以确保这个每次调用阻塞的时间不会超过某个固定的毫秒数;0被解释为无限超时,这是默认值!
SO_RCVBUF和SO_SNDBUF
public synchronized void setReceiveBufferSize(int size)throws SocketException
public synchronized int getReceiveBufferSize()throws SocketException
public synchronized void setSendBufferSize(int size)throws SocketException
public synchronized int getSendBufferSize() throws SocketException
SO_RCVBUF选项控制用于网络输入的建议的接收缓冲区大小。SO_SNDBUF选项控制用于网络输入的建议的发送缓冲区大小;
SO_KEEPALIVE
public void setKeepAlive(boolean on) throws SocketException
public boolean getKeepAlive() throws SocketException
SO_KEEPALIVE的默认值为false。如果打开了SO_KEEPALIVE,下面的代码将其关闭:
if(s.getKeepAlive())
{
s.setKeepAlive(false);
}
OOBINLINE
默认情况下,Java会忽略从Socket接收的紧急数据。不过,如果你希望接收正常数据中的紧急数据,就需要使用下面的方法设置OOBINLINE选项为true:
public void setOOBInline(boolean on) throws SocketException
public boolean getOOBInline() throws SocketException
OOBINLINE的默认值为false。
SO_REUSEADDR
public void setReuseAddress(boolean on) throws SocketException
public boolean getReuseAddress() throws SocketException
关闭还是连接
如果socket关闭,isClosed()方法会返回true,否则返回false。如果你不确定一个Socket的状态,可以用这个方法先进行检查。
不过,这不是一个万全的测试。如果一个Socket从一开始就未连接,isClosed()也返回false,尽管Socket实际上根本没有打开过。
Socket类还有一个isConnected()方法。如果这个Socket确实能够连接远程主机,isConnected()方法就会返回true,即使这个Socket已经关闭。
要查看一个Socket当前是否打开,需要检查两个条件:
//首先isConnected()要返回true,另外isClosed()要返回false。
boolen connected = socket.isConnected() && !socket.isClosed()
关于JAVA Socket的可选项有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
网站题目:JAVASocket的可选项有哪些
标题来源:http://scyanting.com/article/pjhsdg.html