有没有技术可以获取服务端随机启用监听的端口号?

天台道人 发布于 2016/09/26 16:23
阅读 438
收藏 0

公网上,C-S通信中,C已经得到了S的IP,但是不想使用默认端口号的方式连接S,因为端口号是系统资源,可能被其它进程抢先占用

有没有一种网络协议或者方式,只要知道S的IP,就可以获取S的实际监听端口?

加载中
0
ksfzhaohui
ksfzhaohui
端口都没有怎么通信
天台道人
天台道人
不是没有端口,是不用使用默认端口的方式,而是使用随机选择端口
0
eechen
eechen
我打包的PHPDroid在Android上启动PHP服务器前:
php -S 127.0.0.2:port
先用 fsockopen 检测端口是否被占用,返回可用端口:
<?php
$port = 8181;
while ( $fp = @fsockopen('127.0.0.2', $port, $errno, $errstr, 1) ) {
    fclose($fp);
    $port++;
}
file_put_contents(dirname(__FILE__).'/port', $port);
eechen
eechen
回复 @乌龟壳 : 我都不想回你,你试过PHP了没? php -S 127.0.0.2:0 返回 Invalid address: 127.0.0.2:0
乌龟壳
乌龟壳
哥,直接bind(0)就会随机分配端口了,以前和你讲过的。
0
chenganshi
chenganshi
一台机器可以监听多个端口的,怎么知道要用哪个呢!
0
乌龟壳
乌龟壳

@eechen

<?php
$socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
socket_bind ($socket, '127.0.0.1', 0);
socket_getsockname($socket, $socket_address, $socket_port);
echo $socket_port;

这就是现成的例子,php -S没提供绑定随机端口的功能,就要自己造轮子了~~~所以php的方便不在语言而是库!

乌龟壳
乌龟壳
回复 @eechen : 这个看你的需要了,反正能用就行了
eechen
eechen
回复 @乌龟壳 : 自己开发一个PHP容器比修改PHP内置HTTP服务器还麻烦,Swoole建立的HTTP服务器是类似Node建立的HTTP服务器,而不是PHP cli-server那样的PHP Web容器.
乌龟壳
乌龟壳
回复 @eechen : 你也可以不改php源码,用另一套支持随机端口的http服务器,如swoole等,或者自己开发一个http服务也未尝不可,看你的需要。
乌龟壳
乌龟壳
回复 @eechen : 当你检测到可用的端口然后关闭绑定,再用这个端口启动php -S之间,可能这个端口会被其它程序占用。这就是它的不完美之处。最完美的做法是在php代码中实现bind(0)选择随机端口。当然,我只是基于完美的角度说的,一是看需求有没有必要做得这么完美,二是看你有没有那个心情去改代码。
eechen
eechen
回复 @乌龟壳 : 修改PHP解释器源代码?这种做法你也敢推荐?这样是不是你还要重新构建Windows版本解释器呀?如果你要部署在Windows上?明明有官方构建,还得自己修改源代码重新编译,我可没有那么多精力,而且我也不熟悉C.
下一页
返回顶部
顶部