Поэтому я пытаюсь получить размещенный веб-сайт (назовем его online.com), чтобы иметь возможность получить некоторые текстовые файлы из моего локального Apache (WAMP).
Однако, когда я запускаю код, он загружается некоторое время, а затем выдает ошибку 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))
является причиной проблемы.
Будем очень благодарны за любые предложения о том, что может быть не так.
Почему вы используете сокеты? Просто попытайтесь выполнить обычный HTTP-запрос к вашему домашнему IP с file_get_contents()
,
Пример,
<?php
$text_file1 = file_get_contents("http://YOUR_IP:PORT/PRCC");
// so on..
Извините, теперь я понимаю, что это код на стороне клиента.
Методы подключения обычно находятся в спящем режиме до тех пор, пока с сервера не будет отправлен соответствующий ответ. Вы являетесь свидетелем того, как программа сервера сокетов пытается ответить этому клиенту? Один из способов проверить это — сделать так, чтобы сторона сервера записывала запись журнала, представляющую каждую попытку подключения.
Если код просто сидит и не выдает ошибок, он может просто ждать, как и положено.
При составлении экспериментального кода для систем клиент-сервер в сокетах, он может помочь проверять наличие ошибок на каждом этапе, например: подключаться, связывать, отправлять, получать, слушать, принимать и закрывать.