端口取值范围
以下搜自互联网
一般用到的是1到65535,其中0不使用,1-1023为系统端口,也叫BSD保留端口;1024-65535为用户端口,又分为: BSD临时端口(1024-5000)和BSD服务器(非特权)端口(5001-65535).
0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用;
1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;
5001-65535: BSD服务器(非特权)端口,用来给用户自定义端口.
常规方法
首先想到的方法有两种
取[1024, 65536)之间的一个随机数
循环取[1024, 65536)进行bind,直到bind成功为止
第一种方法,无法保证随机获取的端口是未占用的
第二种方法,不停的尝试bind,效率很低
使用InetSocketAddress
InetSocketAddress有三种构造函数
InetSocketAddress(int port)
InetSocketAddress(InetAddress addr, int port)
InetSocketAddress(String hostname, int port)
查看java源码中对第一种构造函数的解释
/**
* Creates a socket address where the IP address is the wildcard address
* and the port number a specified value.
*
* A valid port value is between 0 and 65535.
* A port numbe