Программирование сокетов PHP: сервер недоступен из внешней сети

Я работаю над проектом программирования сокетов PHP. В этом проекте мы собираемся создать сервис в PHP-сокете. Этот сокет будет прослушивать один конкретный порт. И клиент из внешней сети сможет общаться через этот порт.

До сих пор я могу создавать сервер и клиент на php для программирования сокетов. Теперь мой компьютер подключен к локальной сети, поэтому мне нужно использовать переадресацию порта для подключения моего компьютера к внешнему клиенту. Я перенаправляю порт 2000, и вся связь по этому порту передается на IP-адрес моего компьютера. У меня есть маршрутизатор netgear n150 wireless adsl. Я добавляю всю конфигурацию на этом маршрутизаторе. Я тестирую переадресацию портов онлайн на этом сайте http://www.yougetsignal.com/tools/open-ports/ говорит о том, что порт открыт.

Я тестирую свой код локально (в интрасети), он работает нормально. Но когда я пытаюсь запустить сервер на моем компьютере и клиент с веб-сервера, который является моим сервером хостинга ipage. Это выдает мне ошибку «Сервер не может подключиться к серверу».

Server.php

<?php

// set some variables
// My LAN Ip
$host = "192.168.0.5";
$port = 2000;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create       socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket  listener\n");  
$spawn = socket_accept($socket) or die("Could not accept incoming  connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : " . $input;
// reverse client input and send back
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen($output)) or die("Could not write      output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>

Client.php

        <?php
         //my public ip
        $host = "117.223.90.191";
        // port on which I port forword
        $port = 2000;
        $message = "Hello Server";
        echo "Message To server :" . $message;
        // create socket
        $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
        // connect to server
        $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
        // send string to server
        socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
        // get server response
        $result = socket_read($socket, 1024) or die("Could not read server response\n");
        echo "Reply From Server  :" . $result;
        // close socket
        socket_close($socket);
        ?>

Любые предложения по проблеме. Думаю, у многих будет такая же проблема, как у меня.


person Codelord    schedule 25.04.2015    source источник


Ответы (1)


Даже если я думаю, что проблема в переадресации локальной сети, попробуйте проверить ее с помощью:

telnet 117.223.90.191 2000

еще одна вещь, которую нужно попробовать, - заставить сервер прослушивать все интерфейсы

$host = "0.0.0.0";

и взгляните на http://reactphp.org/

person Francesco Danti    schedule 26.04.2015