next40
Новичок
Всем доброго времени суток, требуеться ваша помощь!
Никак не могу реализовать socket server примерно для 5-ти клиентов
Чтение из сокета идёт без проблем со всех клиентов, но вот запись в сокет =(
Проблема: данные в сокет не записываются вообще....а надо чтобы они записывались для каждого клиента никак не могу победить
Остальной код выложу если потребуется....
Никак не могу реализовать socket server примерно для 5-ти клиентов
Чтение из сокета идёт без проблем со всех клиентов, но вот запись в сокет =(
Проблема: данные в сокет не записываются вообще....а надо чтобы они записывались для каждого клиента никак не могу победить
Остальной код выложу если потребуется....
PHP:
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1);
socket_set_nonblock($socket);
//socket_set_block ($socket);
if(($ret = socket_bind($socket, $address, $port)) < 0)
{
echo "failed to bind socket: ".socket_strerror($ret)."\n";
exit();
}
socket_listen($socket);
socket_getsockname($socket, $addr, $port);
print "Server Listening on $addr:$port\n";
$counter=0;
$clients=array($socket);
while(true){
$read=$clients; $write=array();
if(socket_select($read,$write,$ex=null,0)<1) continue;
if(in_array($socket,$read)){
$clients[]=$connection=socket_accept($socket);
// socket_write($connection,"Clients:".(count($clients)-1));
socket_getpeername($connection, $raddr, $rport);
print "# ".(count($clients)-1)." # Received Connection from $raddr:$rport\n";
$key = array_search($socket, $read);
unset($read[$key]);
$write[]=$connection;
continue;
}
foreach($read as $read_socket){//foreach 1
$packet = socket_read($read_socket, 1024, PHP_BINARY_READ);
socket_getpeername($read_socket, $r);
print "READ - ".$r."\n";
if($packet===false){
$key = array_search($read_socket, $clients);
unset($clients[$key]);
echo "client disconnected.\n";
continue;
}
$packet = trim($packet);
if (!empty($packet)) {
foreach($write as $send_socket){//foreach 2
socket_getpeername($send_socket, $w);
// print "WRITE - ".$w."\n";
//if($send_socket==$socket || $send_socket==$read_socket && $r==$w ) continue;
$request=explode("\n",$packet);
$_array=parse_packet($request);// Парсим запрос счетчика
$_array_office=change_indications($_array);//Готовим массив для офиса
print_r($_array_office);//смотрим
if(stat_to_office($raddress,$ra_port,$_array_office)){//Отправляем статистику для офиса,если хорошо сохраняем к себе и выдаем ответ сенсору fsockopen
$counter++;
save($_array,$_array_office);// Сохраняем реальные данные для себя
$head=reply($_array);//Проверяем, что это действительно запрос от счетчика
if(is_numeric(socket_write($read_socket,$head,strlen($head)))){ print "Reply to 3D-Sensor sent.\n";
$key1 = array_search($read_socket, $clients);
socket_close($clients[$key1]);
unset($clients[$key1]);
}
print "## Request N-".$counter." #########################################################\n";
}
}
}
}
}
socket_close($socket);