java如何侦听超过65535的端口

jeffsui 发布于 2014/12/22 14:52
阅读 488
收藏 0

代码如下:

HttpHost host = new HttpHost("192.168.3.230", 98011    );//目标地址

报错信息如下

Exception in thread "main" java.lang.IllegalArgumentException: port out of range:98011
	at java.net.InetSocketAddress.<init>(InetSocketAddress.java:83)
	at org.apache.http.conn.HttpInetSocketAddress.<init>(HttpInetSocketAddress.java:51)
	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:168)
	at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
	at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
	at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:115)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)

我查看了HttpClient的底层代码,发现了异常的信息

public InetSocketAddress(String hostname, int port) {
	if (port < 0 || port > 0xFFFF) {
	    throw new IllegalArgumentException("port out of range:" + port);
	}

也就是说走TCP/IP协议,java socket所能侦听的端口范围是0-65535。

98011这个端口我用telnet命令实际测试,的确已经打开了。

因此才会有这个疑问,希望大家赐教。

以下是话题补充:

@jeffsui:端口修改为9011后,没有此问题。 (2014/12/23 08:57)
加载中
0
红薯
红薯

这是操作系统的限制啊!

0
狐狸糊涂
狐狸糊涂

TCP协议已经规定了端口号是2个字节也就是16位。那么最大的范围就是0-65535。


http://www.baike.com/wiki/TCP

http://www.faqs.org/rfcs/rfc793.html

jeffsui
jeffsui
谢谢你的解答。
返回顶部
顶部