2016-07-15 55 views
2

所以我试图让在托管网站(姑且称之为online.com),以能够从我的Apache本地(WAMP)抓住一些文本文件。Socket连接到本地主机已超时

然而,当我运行的代码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 

当我运行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); 

该行​​是问题的原因。

任何关于什么可能是错误的建议将不胜感激。

+0

什么是错误信息?是否die()在连接失败后返回特定错误? – gladiola

回答

0

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

例,

<?php 

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

我会尽力,非常感谢。让你知道它怎么走 – devonrimmington

+0

这个解决方案正是我所需要的。我只需要更改一些Apache设置并打开正确的端口,但现在我可以从手机访问!我已经接受你的回答 – devonrimmington

0

对不起,我现在认为这是客户端代码实现。

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

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

起草时在插座客户端 - 服务器系统的实验代码,它可以帮助在像每一个关口,以检查错误:连接,绑定,发送,接收,倾听,接受和关闭。

+0

在我向前推进涉及套接字的其他事情之前,我将尝试凯里的解决方案 – devonrimmington