【问题标题】:Socket connection to localhost is timing out与 localhost 的套接字连接超时
【发布时间】:2016-11-18 23:43:08
【问题描述】:

所以我正在尝试建立一个托管网站(我们称之为 online.com),以便能够从我的 Apache 本地 (WAMP) 中获取一些文本文件。

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

我正在使用套接字来执行此操作。我已在我的 PC 防火墙上将 online.com 的 ip 列入白名单。我已将侦听端口添加到 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

当我在 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() 是否返回特定错误?

标签: php apache sockets firewall portforwarding


【解决方案1】:

为什么要使用套接字?只需使用 file_get_contents() 尝试对您的家庭 IP 进行常规 HTTP 请求。

例子,

<?php

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

【讨论】:

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

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

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

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

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

【讨论】:

  • 我会先尝试 Carey 的解决方案,然后再继续处理涉及套接字的任何其他事情
猜你喜欢
  • 2018-06-05
  • 2016-03-11
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 2011-02-05
  • 2018-11-26
相关资源
最近更新 更多