我需要创建一个套接字服务器来监听一些传入的数据。我创建了一个名为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');
由于
答案 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绑定 ,因为
它们默认绑定到该端口(除非您更改了它)。