与localhost的套接字连接正在超时

时间:2016-07-15 17:03:16

标签: php apache sockets firewall portforwarding

所以我试图获得一个托管网站(让我们称之为online.com),以便能够从我的Apache本地(WAMP)获取一些文本文件。

然而,当我运行代码online.com加载一段时间然后出现错误100(超时)。我不知道为什么。

我使用套接字执行此操作。我在我的PC防火墙上将ip.com列入白名单。我已经将侦听端口添加到Apache服务器。我已经完成了端口转发(虽然我并非100%确定我是否已正确完成此操作)。

以下是对上述内容的更具象征性的表示。

端口转发

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

的Apache

Listening on port Y

白名单

Added IP X

当我在online.com上运行php脚本时

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))是问题的原因。

对于可能出现的问题的任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

你为什么使用套接字?只需使用file_get_contents()尝试向您的家庭IP发送常规HTTP请求。

实施例,

<?php

$text_file1 = file_get_contents("http://YOUR_IP:PORT/PRCC");
// so on..

答案 1 :(得分:0)

对不起,我现在意识到这是客户端代码。

连接方法通常会休眠,直到从服务器发送适当的答案。您是否见过套接字服务器程序试图响应此客户端?检查的一种方法是让服务器端写入表示每个连接尝试的日志条目。

如果代码只是坐在那里,而不是提供错误,它可能只是在等待它。

在套接字中为客户端 - 服务器系统起草实验代码时,它可以帮助检查每个时刻的错误,如:连接,绑定,发送,接收,监听,接受和关闭。