socket网络编程中无法访问linux服务器指定端口(来自牛客网WebServer)

前言:

学习WebServer时需要打开服务器指定端口监听,设置10000为监听端口。本地浏览器访问IP:PORT失败。下面是我的解决问题的过程。

1.服务器安全组打开指定端口,然后设置目的端口是指定的端口(图中为10000)在这里插入图片描述在这里插入图片描述

2.确认服务器防火墙已经把端口放开(需用root权限)

ufw status:查看防火墙状态(Inactive & active)
ufw allow 10000 :打开指定端口
ufw enable:打开防火墙
ufw reload:重启防火墙
或者懒一点直接关闭也行ufw disable

3.检查端口状态

netstat -an | grep 10000
查看端口应该是listen的状态,此时应该能通过指定端口telnet通。
在这里插入图片描述
因为我使用windows上telnet无法正常连接,所以我在虚拟机的linux系统上测试连通性。虚拟机使用直连模式。命令为nmap -p PORT -Pn IP_ADDRESS以及telnet IP_ADDRESS PORT
在这里插入图片描述
粉色打码部分就是服务器的公网IP地址,测试显示都能连通。如果这里不通,考虑还是之前服务器里面端口、网络的设置问题。后面不多加赘述。
如果这个测试通过,那么端口及服务运行没有问题说明服务器这里是已经没有限制的。
所以考虑是自己的代码逻辑有问题

4.服务器端程序和客户端程序地址设置错误(重点)

(1)阿里云端服务器socket绑定阿里云的私网地址
(2)要连接阿里云服务器的客户端的socket要设置为阿里云的公网地址
(来自https://blog.csdn.net/weixin_43343803/article/details/102755084
主要是第一点,服务器端要绑定私网的IP

struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("172.23.9.154");//此处是私网IP不是公网,或者0.0.0.0也行
    addr.sin_port = htons(port);
    int ret = bind(lfd, (struct sockaddr*)&addr, sizeof(addr));

5.

以上全部设置一遍,也全都能检验成功,但是我的服务器还是没有收到来自浏览器的http请求。显示我的服务器已经在10000端口建立了连接。但是仍然没有收到回显。
在这里插入图片描述
在这里插入图片描述
后面经过一系列排查,发现函数阻塞在read里面。。。设置成非阻塞就成功了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值