Java网络编程从入门到精通(29):服务端Socket的选项[Java编程]
本文“Java网络编程从入门到精通(29):服务端Socket的选项[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
ServerSocket类有以下三个选项:
1.SO_TIMEOUT: 设置accept办法的超不时间.
2.SO_REUSEADDR:设置服务端同一个端口能否可以多次绑定.
3.SO_RECBUF:设置接纳缓冲区的大小.
1、SO_TIMEOUT选项
可以通过SeverSocket类的两个办法(setSoTimeout和getSoTimeout)来设置和得到SO_TIMEOUT选项的值,这两个办法的定义以下:
public synchronized void setSoTimeout(int timeout) throws SocketException
public synchronized int getSoTimeout() throws IOException
setSoTimeout办法的timeout参数表示accept办法的超不时间,单位是毫秒.在普通情形下,ServerSocket类的accept办法在等候客户端恳求时处于无限等候状况.如HTTP服务器在没有效户拜候网页时会一向等候用户的恳求.普通不需求对服务端设置等候客户端恳求超时,但在某些特别情形下,服务端规定客户端必须在一按时间内向服务端发出恳求,这时就要设置等候客户端恳求超时,也就是accept办法的超不时间.当设置客户端恳求超时后,accept办法在等候超不时间后抛出一个SocketTimeoutException非常.下面的代码演示了若何设置和得到SO_TIMEOUT选项的值,超不时间通过号令行参数方法传入AcceptTimeout.
package server;
import java.net.*;
public class AcceptTimeout
{
public static void main(String[] args) throws Exception
{
if (args.length == 0)
return;
ServerSocket serverSocket = new ServerSocket(1234);
int timeout = Integer.parseInt(args[0]);
serverSocket.setSoTimeout(Integer.parseInt(args[0]));
System.out.println((timeout > 0) ? "accept办法将在"
+ serverSocket.getSoTimeout() + "毫秒后抛出非常!" : "accept办法永久阻塞!");;
serverSocket.accept();
}
}
履行下面的号令:
java server.AcceptTimeout 3000
运行后果:
accept办法将在3000毫秒后抛出非常!
Exception in thread "main" java.net.SocketTimeoutException: Accept timed out
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
at java.net.ServerSocket.implAccept(ServerSocket.java:450)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at chapter5.AcceptTimeout.main(AcceptTimeout.java:16)
setSoTimeout办法可以在ServerSocket对象绑定端口之前调用,也以在绑定端口之后调用.以下面的代码也是精确的:
ServerSocket serverSocket = new ServerSocket();
serverSocket.setSoTimeout(3000);
serverSocket.bind(new InetSocketAddress(1234));
以上是“Java网络编程从入门到精通(29):服务端Socket的选项[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |