ServerSocket选项的基本解析:SO_TIMEOUT选项、SO_REUSEADDR选项、SO_RCVBUF选项
来源:互联网 发布:新后缀域名 编辑:程序博客网 时间:2024/05/22 18:27
1:SO_TIMEOUT选项
此选项表示等待客户连接的超时时间
设置该选项:public void setSoTimeOut(int timeout) throws SocketException
读取该选项:public int getSoTimeOut() throws IOException;
测试程序:
import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TimeoutTest {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8000);serverSocket.setSoTimeout(6000); //等待客户连接的时间不超过6秒Socket socket = serverSocket.accept();socket.close();System.out.println("服务器关闭");} catch (IOException e) {e.printStackTrace();}}}
因为程序中设置了超时时间为6秒,那么当服务器等待的时间超过了超时时间,就会抛出SocketTimeOutException,它是InterruptedException的子类
如果把serverSocket.setSoTimeOut(6000)去掉,那么服务器端会一直等待下去,直到接收到了客户的连接,才会从accept()方法返回
2:SO_REUSEADDR选项
该选项表示是否允许重用服务器所绑定的地址
设置该选项:public void setReuseAddress(boolean on) throws SocketException
读取该选项:public boolean getReuseAddress() throws SocketException
该选项用来决定如果网络上仍然有数据向旧的ServerSocket传输数据,是否允许新的ServerSocket绑定到与旧的ServerSocket同样的端口上,该选项的默认值与操作系统有关,在某些操作系统中,允许重用端口,而在某些系统中不允许重用端口。
当ServerSocket关闭时,如果网络上还有发送到这个serversocket上的数据,这个ServerSocket不会立即释放本地端口,而是等待一段时间,确保接收到了网络上发送过来的延迟数据,然后再释放端口
值得注意的是,public void setReuseAddress(boolean on) throws SocketException必须在ServerSocket还没有绑定到一个本地端口之前使用,否则执行该方法无效。此外,两个公用同一个端口的进程必须都调用serverSocket.setReuseAddress(true)方法,才能使得一个进程关闭ServerSocket之后,另一个进程的ServerSocket还能够立刻重用相同的端口
3:SO_RCVBUF选项
表示接收数据的缓冲区的大小,无论在ServerSocket绑定本地端口之前还是之后,调用setReceiveBufferSize()方法都有效。
设置该选项:public void setReceiveBufferSize(int size) throws SocketException
读取该选项:public int getReceiveBufferSize() throws SocketException
import java.io.IOException;
import java.net.ServerSocket;
public class RecvBufferSizeTest {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8000);
int size = serverSocket.getReceiveBufferSize();
System.out.println("before modify size:" + size);
if(size < 130172) {
serverSocket.setReceiveBufferSize(130172); //把缓冲区的大小设置为128KB
}
System.out.println("after modify:" + serverSocket.getReceiveBufferSize());
} catch (IOException e) {
e.printStackTrace();
}
}
}
- ServerSocket选项的基本解析:SO_TIMEOUT选项、SO_REUSEADDR选项、SO_RCVBUF选项
- ServerSocket选项的基本解析:SO_TIMEOUT选项、SO_REUSEADDR选项、SO_RCVBUF选项
- socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF
- linux网络编程四:socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF
- 选项
- 套接字选项 SO_REUSEADDR
- TCP选项之SO_REUSEADDR
- SO_REUSEADDR套接字选项
- 实战测试SO_REUSEADDR选项
- UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)(SO_REUSEADDR)
- Unix网络编程 SO_REUSEADDR选项
- socket选项--SO_LINGER,SO_REUSEADDR(SO_REUSEPORT)
- SO_REUSEADDR 套接字选项作用
- TCP选项之SO_RCVBUF和SO_SNDBUF
- 套接字选项(SO_RCVBUF和SO_SNDBUF)
- TCP选项之SO_RCVBUF和SO_SNDBUF
- httpd 基本的Module 选项:
- gcc 基本的编译选项
- 【转】使用System.arraycopy()实现数组之间的复制
- oracle 创建表和复制表,复制表结构,复制表数据 查询前N行
- asp.net验证码-拿来主义,直接就能用
- Snow Leopard 终端命令
- 不要在公共接口中传递STL容器
- ServerSocket选项的基本解析:SO_TIMEOUT选项、SO_REUSEADDR选项、SO_RCVBUF选项
- oracle form builder创建的form在本机运行
- 免费OA办公系统评测 到底哪个适合本公司?
- Android2.1源代码结构
- SQL SERVER数据库开发之存储过程应用---[Microsoft Sql Server 2005]
- wince下sourcessources.cmnMakefile.def的相关作用
- 使用CRichEdit前需要调用AfxInitRichEdit();
- Android Guide Dev 之Processes and Threads
- 用string.Join与List<T>或者与string数组转换为字符串