PHP простой сервер / клиент (UDP, датаграмма) не может видеть друг друга - PullRequest
1 голос
/ 08 ноября 2011

Сервер:

 $address = '127.0.0.1';
 $port = 46123;
 if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
     echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; die;
 }
 echo 'socket_create OK '.$address.':'.$port."\n";
 if (socket_bind($sock, $address, $port) === false) {
     echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; die;
 }
 if (socket_listen($sock, 5) === false) {
     echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; die;
 }

 do {
     if (($msgsock = socket_accept($sock)) === false) {
         echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
         break;
     }

клиент:

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$in = ';lsdkf';
var_dump (socket_sendto($socket, $in,strlen($in), 0,'127.0.0.1',46123));

клиент говорит, что ОК, но сервер не получает сообщение. Что я делаю не так?

1 Ответ

3 голосов
/ 08 ноября 2011

Ваш сервер на самом деле не является сервером UDP.Замените

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {

на

if (($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) === false) {

и используйте socket_recvfrom вместо socket_accept (что не имеет смысла для сервера UDP).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...