Время ожидания подключения сокета к локальному хосту истекло


Итак, я пытаюсь создать размещенный веб-сайт (назовем его online.com ), чтобы иметь возможность захватить некоторые текстовые файлы из моего локального Apache (WAMP).

Однако, когда я запускаю код online.com загружается некоторое время, а затем выдает ошибку 100 (истекло время ожидания). Я не знаю, почему.

Для этого я использую сокеты. Я внес ip-адрес в белый список для online.com на брандмауэре моего компьютера. Я добавил порт прослушивания на сервер Apache. Я сделал перенаправление портов (хотя я не уверен на 100%, сделал ли я это правильно).

Следующее является более символическим представлением вышесказанного.

Перенаправление портов

online.com's IP = X, port = 80
local host's IP = (used ipconfig) IPV4 Address, port = Y

Апач

Listening on port Y

Белый список

Added IP X

Когда я запускаю php-скрипт на online.com

if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

// Connect socket to remote server


**if (!socket_connect($sock, 'IP X', PORTY))**
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Could not connect: [$errorcode] $errormsg \n");
}

echo "Connection established \n";
$message = "GET / PRCC /HTTP/1.1 \r\n\r\n";

// Send the message to the server

if (!socket_send($sock, $message, strlen($message) , 0))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Could not send data: [$errorcode] $errormsg \n");
}

echo "Message send successfully \n";
$buf = "";

// Now receive reply from server

if (socket_recv($sock, $buf, 2045, MSG_WAITALL) === FALSE)
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Could not receive data: [$errorcode] $errormsg \n");
}

// print the received message

echo $buf . "this is the buffer";
socket_close($sock);

Строка if(!socket_connect($sock , 'IP X' , PORT Y)) является причиной проблемы.

Мы будем очень признательны за любые предложения о том, что может быть не так.

Author: peterh, 2016-07-15

2 answers

Почему вы используете сокеты? Просто попробуйте выполнить обычный HTTP-запрос на ваш домашний IP-адрес с помощью file_get_contents().

Пример,

<?php

$text_file1 = file_get_contents("http://YOUR_IP:PORT/PRCC");
// so on..
 0
Author: Carey, 2016-07-15 17:06:39

Извините, теперь я понимаю, что это код на стороне клиента.

Методы подключения обычно находятся в спящем режиме до тех пор, пока с сервера не будет отправлен соответствующий ответ. Являетесь ли вы свидетелем того, как программа сервера сокетов пытается ответить этому клиенту? Один из способов проверить это - заставить серверную сторону записывать запись в журнал, представляющую каждую попытку подключения.

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

Когда разрабатывая экспериментальный код для клиент-серверных систем в сокетах, он может помочь проверять наличие ошибок на каждом этапе, например: подключение, привязка, отправка, получение, прослушивание, принятие и закрытие.

 0
Author: gladiola, 2016-07-15 18:15:06