记录学习poll/epoll模型中的问题

问题描述:

学习TCP套接字变成的过程中,在虚拟机的CentOs7系统上运行了基于TCP的服务器端,但是在本机Windows系统下运行客户端却始终不能成功通信,花了很长时间才解决问题,在此记录一下。


原因分析:

查了很多资料,发现这种情况下可以从三个方面检查:

  1. 检查代码
    主要就是看客户端connect的IP是否正确、端口号是否被占用。
  2. 检查Linux的防火墙

解决方案:

客户端连接服务器连接失败,connect()函数返回的错误代码是10061
10061:目标主机主动拒绝,连接不能建立
所以就先从Linux的服务器端找问题了。问了ChatGPT,建议我把客户端代码里的服务器IP地址从原来的127.0.0.1改成虚拟机的IP。这样改了以后确实有效,后续我成功解决问题以后把IP又换回127.0.0.1确实也不能成功连接。为了方便和我一样的初学者解决问题,我把查看虚拟机IP地址的命令也放在这里:

ifconfig

输入ifconfig以后显示的ens的那个IPV4地址就是虚拟机的IP地址。
看了别的资料,在这一步你也需要额外检查一下,Windows那里的IP和这个虚拟机IP是否在一个子网,如果不是就需要在虚拟机设置里修改虚拟机IP,这里就不多介绍了。

然后就是检查当前Windows端是否能与Linux端进行通信,需要先运行Linux端的服务器程序。
在Windows的cmd窗口运行telnet 虚拟机IP 8080

telnet 虚拟机IP 8080

显示“无法打开到主机的连接。 在端口 8080: 连接失败”,说明Windows的客户端根本连接不了Linux的服务器端。

最后,在Linux端尝试关闭防火墙。
转自:CentOS7查看和关闭防火墙

查看防火墙状态

firewall-cmd --state

停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service 

直接关闭防火墙这种方式可以解决问题,但是不太安全。
也可以试着关闭该端口的防火墙

firewall-cmd --zone=public --remove-port=8080/tcp --permanent

再尝试用telnet命令连接,发现连接成功,服务器和客户端可以正常通信了,问题解决。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值