我有一些嵌入式设备连接到在6000端口上运行的服务器(提供的Windows软件)。
我对这是如何工作感到困惑,因为我的理解是当在端口上建立tcp连接时,端口被占用,无法建立其他连接。
但我想这个逻辑是错误的,因为多个设备可以连接到他们的服务器软件,就像Web服务器可以接受端口80上的多个连接一样。
当我使用命令nc -l -k 6000
在ubuntu服务器上运行netcat时,它似乎做了我想做的事情,我可以看到来自多个设备的消息一个接一个地出现。
来自netcat手册:
-k Forces nc to stay listening for another connection after its cur-
rent connection is completed. It is an error to use this option
without the -l option.
我试图用php实现类似的场景,但我失败了。这就是我到目前为止所拥有的:
<?php
$address = "0.0.0.0";
$port = 6000;
$mysock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($mysock, $address, $port) or die('Could not bind to address');
socket_listen($mysock, 5);
$client = socket_accept($mysock);
while (true) {
$input = socket_read($client, 1);
echo $input;
}
?>
我可以看到来自第一个连接的设备的第一条消息但之后什么也没有。此外,这似乎是错误的方法,因为while循环导致高CPU使用率。
注意我在ubuntu服务器上的命令行运行php脚本。
我意识到这段代码只会接受一个客户端,但是如何更改它以使其行为类似于nc并接受多个连接。对不起,如果这个问题看起来很模糊,我真的不知道从哪里开始。任何帮助表示赞赏