|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,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();
}
}
实行上面的命令:
javaserver.AcceptTimeout3000
运转了局:
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));
<p>
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。 |
|