首页 > 编程知识 正文

java实现打印功能,java实现端口转发

时间:2023-05-06 21:26:01 阅读:59369 作者:4459

端口值范围

以下是从网上搜索

通常使用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 举报,一经查实,本站将立刻删除。