Добрый день, никак не разберусь почему когда идут подключения с 1 ip то всё нормально как только начинаются подключения с другого адреса, то скрипт перестает нормально делать socket_write =( нормально пишет для первого подключившегося ip, для 2,3 и тд уже не пишет нормально в сокет в чем может быть проблема? вот код:
| Код | $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; while(true){ if($connection = socket_accept($socket)) { socket_getpeername($connection, $raddr, $rport); print "Received Connection from $raddr:$rport\n"; while($packet=socket_read($connection,1024,PHP_BINARY_READ)){ print "Reading socket....\n"; // print $packet; $request=explode("\n",$packet); //print_r($request); $_array=parse_packet($request);// Парсим запрос счетчика $_array_office=change_indications($_array);//Готовим массив для офиса print_r($_array_office);//смотрим if(stat_to_office($raddress,$ra_port,$_array_office)){//Отправляем статистику для офиса,если хорошо сохраняем к себе и выдаем ответ сенсору $counter++; save($_array,$_array_office);// Сохраняем реальные данные для себя $head=reply($_array);//Проверяем, что это действительно запрос от счетчика if(is_numeric(socket_write($connection,$head,strlen($head)))){ //Отправляем ответ print "Reply to counter sent.\n"; } print "## Request N-".$counter." #########################################################\n"; // socket_close($connection); }else{ print "Error from Office :-(\r\n"; }
} } } socket_close($socket);
|
|