我有一个 PHP 应用程序正在尝试通过我的路由器打开到打印机的套接字连接。
需要注意的几点是 - 我的网络技能不足,所以我可能会忽略一些显而易见的东西,或者这可能无法按照我想要的方式实现。话虽如此,我已经对这个问题进行了大量搜索,但似乎找不到任何有这个确切问题的人(只是很多人试图远程 SSH)。我还知道我尝试连接的设备工作正常,因为我有一个小型的 nodejs 应用程序,它在本地网络上成功打开了与它的连接。最后,我正在使用 Docker 在本地运行 PHP 应用程序,这可能与我的问题有关(尽管我知道由于日志,连接正在到达路由器)。
代码很简单:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_TCP, SO_DEBUG, 1);
$server_connect = socket_connect($socket, "router_public_ip", 9100);
当我尝试连接时,PHP 抛出错误socket_connect(): unable to connect [111]: Connection refused
,并且路由器日志显示连接失败。
我注意到路由器日志中的起始端口是随机的,并尝试将我的端口转发配置更改为:
这给了我相同的结果,我的路由器没有给我太多信息(至于为什么连接失败,是否被阻止了?)。以下是日志中显示的全部内容:
答案1
然后我对打印机网络配置中的 0.0.0.0 网关感到疑惑。
这意味着您的打印机可以直接连接到任何 IP 地址。在正常情况下,系统只能直接与其子网中的其他系统通信(参见掩码)。为了获得更广泛的覆盖范围,它需要通过网关。