1

我需要创建一个套接字服务器来监听一些传入的数据。我创建了一个名为 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');

谢谢

4

1 回答 1

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分配给您的IP,即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 上绑定将失败,因为它们默认绑定到该端口(除非您更改了它)。

于 2013-07-09T18:53:20.737 回答