重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

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关闭,所有剩余的数据都不会发送,也不会收到确认!
JAVA 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

JAVA Socket的可选项有哪些
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
JAVA Socket的可选项有哪些

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://cqcxhl.com/article/pjhsdg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP