Проблема в функции socket_connect () - PullRequest
2 голосов
/ 05 сентября 2010
// Create a new socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// An example list of IP addresses owned by the computer
$sourceips['kevin']    = '127.0.0.1';
$sourceips['madcoder'] = '127.0.0.2';

// Bind the source address
socket_bind($sock, $sourceips['madcoder']);

// Connect to destination address
socket_connect($sock, $sourceips['madcoder'], 80);

// Write
$request = 'GET / HTTP/1.1' . "\r\n" .
  'Host: example.com' . "\r\n\r\n";
socket_write($sock, $request);

// Close
socket_close($sock);

Я получаю сообщение об ошибке

Предупреждение: socket_connect () [function.socket-connect]: невозможно подключиться [0]: была предпринята попытка операции с сокетом для недоступного хоста.в C: \ wamp \ www \ sockert \ sockert.php в строке 13

Спасибо,

Ответы [ 3 ]

1 голос
/ 05 сентября 2010

Ваша система разработки действительно слушает 127.0.0.2?Обычно они только слушают 127.0.0.1 как адрес обратной связи.

Вы можете получить список активных прослушиваемых IP-адресов / портов с помощью netstat -a -p tcp

1 голос
/ 05 сентября 2010

Хм, похоже, вы взяли этот пример прямо с справочной страницы PHP для socket_bind () .Я предполагаю, что, кроме того, вы не изменили ни один код, и у вас не установлена ​​машина на 127.0.0.2.Это ваша проблема.

Помните, пример кода - это просто пример кода.Вот рабочий пример, основанный на примере кода, который просматривает случайный IP-адрес Google.Я также добавил функцию socket_read (), чтобы вы могли видеть часть данных (ну, 1024 байта), которые вы возвращаете.

    <?php
    // Create a new socket
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    // An example list of IP addresses owned by the computer
    $sourceips['google'] = '74.125.127.103';

    // Bind the source address
    socket_bind($sock, $sourceips['google']);

    // Connect to destination address
    socket_connect($sock, $sourceips['google'], 80);

    // Write
    $request = 'GET / HTTP/1.1' . "\r\n" .
               'Host: google.com' . "\r\n\r\n";
    socket_write($sock, $request);

    // You'll get some HTTP header information here,
    // and maybe a bit of HTML for fun!
    print socket_read($sock, 1024);

    // Close
    socket_close($sock);
    ?>
0 голосов
/ 05 сентября 2010

Это означает, что на 127.0.0.2 нет порта 80.Вы ожидаете подключения к веб-серверу?

ping 127.0.0.2

Если вы не получили ответа, вам нужно будет указать новый адрес.

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