PHP:Socket服务器被Socket_recv()中断
我正在编写PHP套接字服务器,这里显示的是导致错误的部分。我发现socket\u recv()导致问题,它只允许一台计算机连接。但是,如果我将socket_recv注释掉,则其工作正常。但我也必须在套接字服务器中接收数据。帮我找出解决办法。请同时指出代码中的任何错误。JQuery部分工作正常,因此没有在这里打印它PHP:Socket服务器被Socket_recv()中断,php,jquery,sockets,Php,Jquery,Sockets,我正在编写PHP套接字服务器,这里显示的是导致错误的部分。我发现socket\u recv()导致问题,它只允许一台计算机连接。但是,如果我将socket_recv注释掉,则其工作正常。但我也必须在套接字服务器中接收数据。帮我找出解决办法。请同时指出代码中的任何错误。JQuery部分工作正常,因此没有在这里打印它 <?php set_time_limit(0); $host = '172.28.4.5'; $port = 10000; $null = NU
<?php
set_time_limit(0);
$host = '172.28.4.5';
$port = 10000;
$null = NULL;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, $host, $port);
socket_listen($socket);
$clients = array($socket);
while(true) {
$new_socket = socket_accept($socket);//Accepting new connection/socket/client if any
$clients[] = $new_socket;//Adding the new client/socket/connection to client array
$header = socket_read($new_socket, 1024);
perform_handshaking($header, $new_socket, $host, $port);
/* If I want to notify if new connection is established**/
socket_getpeername($new_socket, $ip);
$message = "Welcome to WebSocket $ip";
$array = array(
'message' => $message
);
$message = mask(json_encode($array));
write_to_socket($message);
$found = array_search($socket, $clients);
unset($clients["$found"]);
//Going through each client
foreach($clients as $client) {
//Getting messages with loop how many packages for each client has
while(socket_recv($client, $buf, 1024, 0) >= 1) {
$array = json_decode(unmask($buf));
print_r($array);
}
}
}
}
?>
似乎
代码是错误的
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, $host, $port);
socket_listen($socket);
//$clients = array($socket); <---- here
while(true) {
$socket=socket\u创建(AF\u INET、SOCK\u STREAM、SOL\u TCP);
socket\u set\u选项($socket,SOL\u socket,SO\u REUSEADDR,1);
套接字绑定($socket、$host、$port);
socket\u监听($socket);
//$clients=数组($socket);你能再给我留言吗?怎么了?我只能连接一台电脑。如果我不使用socket\u recv(),它可以正常工作。除了socket\u recv部分之外,其他都可以工作。因为你收到了侦听的socket,所以它会出错。按你说的做了,还是一样的问题。你能自己试试吗?