У меня есть сервер сокетов PHP, который должен общаться с несколькими клиентами.Я знаю if(socket_listen($sock, 5)
слушает 5 клиентов.Но когда я пытаюсь подключить второе устройство, оно не подключается, это как соединение с первым устройством, блокирующее другое соединение.
У меня также возникает проблема, когда сервер и клиент общаются и по какой-то причине соединение закрывается,тогда, если я попытаюсь подключить то же самое устройство снова или иначе, это не будет работать.Затем мне нужно перезапустить сервер, чтобы он снова мог принимать соединения.
<?php
require "init.php";
$sql = "SELECT * FROM `info` where sent = 0 order by id desc";
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$address = '192.168.50.30';
$port = 3005;
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}
if(socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
if(socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
do {
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
/* Send Welcome. */
$msg = "HELLO".chr(0);
socket_write($msgsock, utf8_encode ($msg), strlen($msg));
do {
$result = $con->query($sql);
$row = $result->fetch_assoc();
if(!empty($row["Token"])){
$msg = $row["Token"]. chr(0);
socket_write($msgsock, utf8_encode($msg), strlen($msg));
$result = $con->query("update info set sent = 1 where id = ".$row["id"]);
}
// $talkback = $_SERVER['REMOTE_ADDR']." Said: '$buf'.\n".chr(0);
// socket_write($msgsock, $talkback, strlen($talkback));
} while (true);
socket_close($msgsock);
} while (true);
socket_close($sock);
?>