我家里有一台带有 NGINX 的 Debian 服务器机器。现在它只提供与 nginx 一起安装的默认 index.html。我在Dynu中获得了一个主机名,并通过Let's Encrypt获得了 TLS 证书
我可以使用我的主机名在 Web 浏览器上完美地访问我的默认 nginx 网站,并且一切正常。
但是我需要在这个 Debian 服务器中用 C 语言实现一个简单的服务器套接字,侦听端口 8080,并通过互联网从任何计算机使用 C 语言的客户端套接字连接到它。
我的问题是,尽管已经在我的家庭路由器中转发了端口 8080 并将端口 8888 添加到 Debian 服务器防火墙(sudo ufw allow 8888/tcp
和sudo ufw allow 8888/udp
),但我仍然无法连接到服务器套接字。
如果我在同一台机器上运行服务器和客户端套接字程序,它们在连接客户端时工作正常,localhost
所以我知道代码工作正常。问题是当我在 Debian 服务器中运行服务器套接字程序和在笔记本电脑中运行客户端套接字程序时,无论我使用 Debian 本地地址还是 dynu 主机名,它们都无法连接。
当我运行客户端时,它以错误结束,Connection refused
服务器套接字程序甚至不闪烁,它只是停留在等待端口 8888 上的连接。
我在开头提到了 nginx、主机名和证书,因为我不知道这是否会与独立于 nginx 的 c 服务器套接字冲突,我的意思是,我不知道这是否是 nginx 的限制。我不认为这是因为我使用的端口与配置 nginx 的端口不同,但我不确定。我什sudo systemctl stop nginx
至已经编辑了 nginx 服务器,但这并没有帮助。
我错过了什么?
更新:好的,我运行了我的服务器套接字并将它的监听,然后我运行netstat -ntlp
,现在我可以看到我的服务器套接字应用程序:
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 8959/socket-server/
我不得不更改为端口 8888,因为端口 8080 正在被“WWW Cache”(不管是什么)使用,但客户端仍然没有连接。
我的套接字服务器绑定到通过以下方式获得的地址getaddrinfo(NULL, port, &hints, &server_info)