socket_create_listen не работает для всех интерфейсов в windows - PullRequest
1 голос
/ 14 января 2020

Я использую Symfony 4, чтобы открыть сокет слушателя TCP. Это работает как шарм в linux. Я должен заставить его работать и в Windows ОС.

Если я выполню команду Symfony, она откроет сокет 127.0.0.1:4501, и я могу подключиться с клиента, расположенного на та же машина. Эта проблема возникает, когда я пытаюсь подключиться с других P C в локальной сети к другим устройствам, расположенным за пределами локальной сети (я перенаправил порт в маршрутизаторе).

Это код для открытия socket:

 if (!$localSocket = socket_create_listen($listeningPort)) 
 {
     throw new \RuntimeException('Could not create socket.');
 }

Если я выполню эту команду в командной строке, я увижу, что порт открыт на 127.0.0.1:4501 вместо желаемого значения 0.0.0.0:4501

netstat -ab command

Как можно прослушать все сетевые интерфейсы и заставить его работать?

Спасибо.

1 Ответ

1 голос
/ 14 января 2020

Я получил тестирование с другим кодом между Windows и Linux. Это результат:

//Windows
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') 
{
   $localSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   socket_bind($localSocket, "0.0.0.0", $listeningPort);
   socket_listen($localSocket);
} 
else 
{
   //Linux
   if (!$localSocket = socket_create_listen($listeningPort)) 
   {
      throw new \RuntimeException('Could not create socket.');
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...