Aub*_*bin 5 java sockets networking tcp
我工作的背景是我的局域网.
下面的代码示例是用Java语言编写的,但我的问题是TCP,而不是编程.
我遇到了以下连接超时:
这个值来自我的网络观察,但我认为它存在一个RFC.
以下是有关超时的一些信息:
你能给我更多指点吗?
@Override
public void run() {
for( int port = _portFirst; port < _portLast; ++port ) {
String host = "192.168.1." + _address;
boolean success = false;
long before = System.currentTimeMillis();
try {
Socket socket = new Socket();
SocketAddress endpoint = new InetSocketAddress( host, port );
socket.connect( endpoint, 0 );
success = true;
socket.close();
}// try
catch( ConnectException c ){/**/}
catch( Throwable t ){
t.printStackTrace();
}
long duration = System.currentTimeMillis() - before;
System.err.println( host + ":" + port + " = " + duration );
_listener.hostPinged( host, port, success, duration );
}
}
Run Code Online (Sandbox Code Playgroud)
use*_*421 13
连接超时没有RFC.任何RFC或其他文档都不可能事先知道任何网络中的主要条件.
一般来说,您可以期待成功的连接非常快; 一个ECONNREFUSED(ConnectException: connection refused)快得多; 和连接超时(ConnectException: connect timeout),只要它需要,取决于原因,两端的平台,以及介入网络的性质.在Windows中,我认为连接超时包括三次连接尝试的总时间,超时为6s,12s和24s,总共42s; 在各种Unix中我相信总数更像是70s,这可能是由于3次尝试超时10s,20s和40s.如您所见,这取决于平台.还有一个问题是,在Windows服务器上填充积压队列将导致RST被发送到传入的SYN,在Unix/Linux服务器上,它将不会对传入的SYN产生任何响应.
您还应该注意到在Java中,与Javadoc的多年相反:
零连接超时并不意味着无限超时,它意味着平台默认超时,如上所示不超过约70s;
您无法指定增加平台默认值的连接超时; 您只能使用它来降低平台默认值.
| 归档时间: |
|
| 查看次数: |
14132 次 |
| 最近记录: |