小编C-s*_*eed的帖子

PHP套接字 - 只能从localhost连接(Port Forwarding问题?)

首先,感谢您花时间阅读本文.我有一个PHP套接字的奇怪问题.我正在开发一个通过localhost工作的php套接字守护进程,但是当我尝试从局域网或其他PC外部连接时,它不起作用.我已将我的守护进程简化为一个非常基本的套接字连接,以复制该问题供您查看.

基本上,这是Senario.我在端口6667上的服务器上启动套接字守护程序.我可以通过telnet和运行守护程序的本地计算机上的浏览器连接到守护程序,但是我无法从任何其他计算机连接 - 守护程序甚至看不到连接尝试正在制作

为了进一步使问题复杂化(这就是为什么我认为这是端口转发问题),我的ISP阻止端口80,所以我设置了dyndns和我的路由器使用端口8000.我还设置了我的路由器以将端口6667转发到我的服务器.

要从浏览器访问我的守护进程,请输入以下(seudo)url:

http://mydomain.com:8000/client.php
Run Code Online (Sandbox Code Playgroud)

这可以从本地计算机上运行并且将连接,但是从任何其他计算机,守护程序甚至看不到正在进行的连接尝试.但是,如果我指定这样的端口:

http://mydomain.com:6667
Run Code Online (Sandbox Code Playgroud)

我的守护进程确实看到了正在建立的连接,但当然浏览器没有加载客户端页面,用户可以使用该页面与守护进程进行交互.

我的客户端使用flash文件来创建套接字连接(jsocket),但我知道它不是跨域策略文件,因为策略是正确的,并且当通过localhost连接时,它正确地提供策略文件.

这是简化的守护程序代码:

 <? 

// set some variables 
$host = '0.0.0.0'; 
$port = 6667; 

// don't timeout! 
set_time_limit(0); 

// create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

// bind socket to port 
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); 

// start listening for connections 
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); 

// accept incoming connections 
// spawn another socket …
Run Code Online (Sandbox Code Playgroud)

php sockets daemon localhost

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

daemon ×1

localhost ×1

php ×1

sockets ×1