本地套接字连接超时

3
我正在尝试让一个托管的网站(我们称之为online.com)能够从我的Apache本地服务器(WAMP)中获取一些文本文件。然而,当我运行代码时,online.com加载了一段时间,然后出现错误100(超时)。我不知道为什么会这样。我使用sockets来完成这个任务。我已经在我的电脑防火墙上将online.com的ip加入白名单。我已经将监听端口添加到Apache服务器中。我已经进行了端口转发(虽然我不能确定是否正确)。以下是对以上内容的更象征性的表示。端口转发。
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))这一行是问题的原因。

如果有任何关于可能出错的建议,将不胜感激。


错误信息是什么?在连接失败后,die()是否返回特定的错误? - gladiola
2个回答

0

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

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

如果代码只是坐在那里,没有提供错误,那么它可能只是按照预期等待。

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


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - devonrimmington

0

为什么要使用 sockets?只需使用file_get_contents()尝试向您的家庭 IP 发送常规HTTP请求即可。

例如,

<?php

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

我会尝试的,非常感谢。我会让你知道进展如何。 - devonrimmington
这个解决方案正是我所需要的。我只需要更改一些Apache设置并打开正确的端口,但现在我可以从我的手机访问了!我已经接受了你的答案。 - devonrimmington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接