端口值范围
以下是从网上搜索
通常使用1到65535,其中不使用0,1-1023是系统端口,也称为BSD保留端口。 1024-65535是用户端口,分为: BSD临时端口(1024-5000 )和BSD服务器(非特权)端口) 5001-65535。
0-1023: BSD保留端口也称为系统端口,这些端口仅适用于具有系统许可的进程。
1024-5000: BSD临时端口,典型APP应用使用1024-4999进行通信;
5001-65535: BSD服务器(非特权)端口,为用户定制端口。
常规方法
首先,有两种可能的方法
取[ 1024,65536 ]之间的随机数
循环[ 1024,65536 ]直到bind成功
第一种方法并不保证随机获取的端口没有被占用
第二种方法是不断尝试bind效率很低
使用InetSocketAddress
InetSocketAddress有三个构造函数
inetsocketaddress (导入)。
inetsocketaddress (inetaddressaddr,int端口) )。
inetsocketaddress (字符串主机名称,int端口) )。
显示java源代码中第一个构造函数的说明
/* * createsasocketaddresswheretheipaddressisthewildcardaddress * andtheportnumberaspecifiedvalue.*
* avalidportvalueisbetween0and 65535.* aport number of { @ code zero } willletthesystempickupan * ephemeralportina { @ code bind
* @ paramporttheportnumber * @ throwsillegalargumentexceptioniftheportparameterisoutsidethespecified * rangeofvalidportvalues
公共信息套接字地址(intport ) {
this (inet地址. any local address ),port );
}
如果入口端口为0,系统将自动分配临时端口。 这样可以创建以下工具类
/**
*系统可用端口*
*
*系统可用端口* * use like : * sys Freeport.custom ().getPort ); * SysFreePort.custom ().getPortAndFree ); * * *@author ManerFan 2015年2月3日* /公共类sys Freeport {
私密性staticrandomrandom=new random (;
专用套接字套接字;
/**
*获取系统可用端口*
*
*获取系统的空闲端口并占用该端口资源。 * * * @ throwsioexception */publicstaticsysfreeportcustom (throwsioexception )。
返回新sys Freeport (;
}
私有系统自由端口{ } throwsioexception { }
socket=new Socket (;
inetsocketaddressinetaddress=newinetsocketaddress (0;
socket.bind (inet地址;
}
/**
释放端口资源*
*
*释放此端口资源* * * @ throws io exception { */public void Freeport () throwsioexception ) }。
if (null==socket|| socket.is closed () )
返回;
}
socket.close (;
}
/**
返回端口*
*
*返回端口,不释放端口资源* * /公共int getport () )。
if (null==socket|| socket.is closed () )
返回- 1;
}
return socket.getLocalPort (;
}
/**
返回端口*
*
*返回端口,释放端口资源。 * * * @ throwsioexception */publicintgetportandfree (throwsioexception )。
if (null==socket|| socket.is closed () )
返回- 1;
}
int port=socket.getLocalPort (;
socket.close (;
返回端口;
}
/**
*生成随机端口* *
*
[在[start,end之间随机生成数字以生成port * * * @ paramstart * @ param end * @ return int */publicstaticintrandom (intstart,int end ) ]
return random.nextint (math.ABS (结束-开始) ) start;
}
}
sysfreeportport=sys Freeport.custom (; 获取和占用系统上的空闲端口(防止其他程序再次占用此端口)
使用端口. getport (; 返回获取的空闲端口(不释放端口资源)
使用port.getPortAndFree (; 返回获取的空闲端口,释放端口资源
使用端口. Freeport (; 释放端口资源
版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。