如何正确使用PHP来监听传入的套接字连接?

时间:2013-07-09 18:26:14

标签: php sockets

我需要创建一个套接字服务器来监听一些传入的数据。我创建了一个名为socketSetup的PHP,并在页面加载后执行它。文件本身位于子目录中,我需要将套接字绑定到一个地址。

这是可能的吗?我的主要问题在于我如何绑定它...我只是将它绑定到主域或子目录?

$sock = socket_create(AF_INET, SOCK_STREAM, 0);

socket_bind($sock, "http://mydomain.com/mysubdirectory, 80) or die('Could not bind to address');

由于

1 个答案:

答案 0 :(得分:1)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
... :::我应该将地址绑定到我的服务器应用程序? ::: ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

推荐: 0.0.0.0 //在每个可用地址绑定。

如果你知道自己在做什么,那么你应该使用路由器分配给你机器的 ip 。只有在等待本地网络之外的数据包时才需要这样做。

否则你应该以127.0.0.1绑定

分配给您机器的IP将如下所示 例如:192.168.1.5
网络掩码:255.255.255.0< - 忽略此


找到它,简单方法:

  

您可以使用$_SERVER['SERVER_ADDR']检索地址   不应该依赖它。

找到它,硬编码方式:

  

在Windows上:键入 ipconfig / all 并搜索 IPv4地址条目。
  在linux上:输入 ifconfig
  如果您无权访问控制台,请使用 phpinfo(); < - 不确定


绑定 http://www.example.com/dir/ 是错误的,它永远不会有效。

  

小心: 机器对外部IP(DSLAM分配给你的那个)知之甚少,即 128.31.53.90 ),主要是   因为那是路由器的工作。   

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
... :::我应该将端口绑定到我的服务器应用程序? ::: ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  

当客户向您发送数据时,他们会在您的路由器上首先   谁然后决定如何处理他们。该决定基于您的   路由器NAT表和传入端口。

NAT表通常如下所示:

+==============================================+
|   LAN IP   |  Incoming Port  | Outgoing Port |
+============+=================+===============+
|192.168.1.5 |       8080      |       80      |
+------------+-----------------+---------------+
|192.168.1.2 |       25        |       25      |
+------------+-----------------+---------------+

设X为具有以下结构的数据包:

         Header            Data
 +===================+===============+
|-| Your External IP |      ...      |
|X|                  |      ...      |
|-| Destination Port |      ...      |
 +===================+===============+

路由器将使用destination port并在表中搜索类似的incoming port条目
如果找到一个,那么它将重定向数据包到匹配的LAN IP:传出端口

例如:

  

数据包到达目的地端口8080,它将被转发到192.168.1.5:80。

       >>                    25          >>       192.168.1.2:25

因此,为了捕获某人在8080发送的数据包,你需要绑定在192.168.1.5:80,
如果你在端口25等待数据包,则为25。

  

小心: 网络服务器的情况下,端口 80绑定 ,因为
它们默认绑定到该端口(除非您更改了它)。