我从事个人项目,在多客户端服务器上管理套接字时遇到问题。
因此,根据 php.net,可以将 socket_read() 的参数放入由 socket_create 创建或由 socket_accept 接受的套接字...
如果我理解,socket_create 创建的套接字是一个“本地”套接字,而 socket_accept 发送的套接字是套接字客户端,是这样吗?
在这种情况下,我想将我的服务器套接字放在 socket_read 的参数中,以便在此套接字上的多个写入中等待客户端。
更清楚地说,我接受 4 个客户端并等待其中一个在此套接字上写入,但我无法输入特定客户端套接字的参数,因为我不知道他们中的哪一个会写入...
当我把套接字创建:socket_create,php返回一个错误
如您所见,我的母语不是英语,但没有人能回答我...
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() a échoué : raison : " . socket_strerror(socket_last_error()) . "\n";
}
if (socket_bind($sock, $this->address, $this->port) === false) {
echo "socket_bind() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
}
if (socket_listen($sock, 5) === false) {
echo "socket_listen() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
}
for($i=0;$i<$this->maxClient;$i++){
if(($client = socket_accept($sock)) === false){
echo "socket_accept() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}else echo "<br/>Client $client[$i] has connected\n";
$this->joueurs[$i] = new Joueur($client,$i);
}
while($start){
$messageClient = socket_read($sock , 1024);
......
}
所以,我有两个问题,第一个是,我需要 socket_read() 不会阻止我的脚本并扫描我的套接字,直到它找到要读取的内容。
第二个问题是,由于我的程序没有停止,我的客户没有收到任何东西,当我停止我的服务器时,我的客户收到了消息......
你有什么想法吗?
谢谢