1. Qt连接代码
void Client::toConnect() { if (isConnecting || QAbstractSocket::UnconnectedState != tcpSocket->state()) return; tcpSocket->abort(); tcpSocket->connectToHost(QHostAddress(SERVER_IP), SERVER_PORT); tcpSocket->waitForConnected(); }
这里省略Linux处理代码...
2. 问题分析以及解决方法
2.1 服务器IP是否能被Ping通?
打开cmd窗口(①win+r,然后输入cmd回车。②或直接搜索框直接搜索cmd)
ping 服务器地址/域名
2.2 客户端中的服务器IP和Port是否填写正确?
Qt中连接服务器的两个函数的函数原型:
注:quint16 = unsigned short
(1)第一个参数:QString形式的IP,第二个参数:quint16的参数,最后两个参数不需要填。
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
(2)第一个参数:QHostAddress形式的IP,第二个参数:quint16的参数(quint16 = unsigned short),最后两个参数不需要填。
[virtual] void QAbstractSocket::connectToHost(const QHostAddress &address, quint16 port, QIODevice::OpenMode openMode = ReadWrite)
2.3 Linux的代码处理是否正确?
自己先在Linux上编写几个客户端测试测试,看看所写的服务器代码是否能够正确处理客户端连接。
2.4 Linux服务器端口是否开放(很重要)?
有两种解决方法:①开放端口;②关闭防火墙
2.4.1 开放端口(一劳永逸,推荐!)
先列举需要用到的命令:
(1)查看所有已开放端口:firewall-cmd --list-port
(2)查看某个端口是否开放:firewall-cmd --query-port=端口号/协议(tcp/udp)
(3)开启端口:firewall-cmd --zone=public --add-port=端口号/协议(tcp/udp) --permanent
(4)移除端口:firewall-cmd --zone=public --remove-port=端口号/协议(tcp/udp) --permanent
(5)重启防火墙:firewall-cmd --reload
实例说明:开放端口7799去用于客户端通信
第一步:开放端口7799用于TCP通信
[root@VM-4-2-centos ~]# firewall-cmd --zone=public --add-port=7799/tcp --permanent
第二步:重启一下防火墙
[root@VM-4-2-centos ~]# firewall-cmd --reload
第三步:添加服务器的防火墙规则,这一步不弄也是连接不上的
步骤分析:
1)第三步不弄的话也是连接不上的...,因为没添加务器的防火墙规则。
2)如果只是弄了第三步,那也是连接不上的...,因为使用firewall-cmd --list-port
命令是查不到服务器添加的防火墙规则。
2.4.2 关闭防火墙(开放所有端口,不推荐!)
这里也有两种方法,第一种麻烦但是相对安全,第二种方便但是很不安全。
方法一:每次通信时都去关闭防火墙
方法二:关闭防火墙之后,再禁用防火墙自启,防止防火墙自启导致端口无法使用
作用 | 命令 |
---|---|
关闭防火墙 | systemctl stop firewalld |
禁用防火墙自启 | systemctl disable firewalld |
启动防火墙 | systemctl start firewalld |
启动防火墙开机自启 | systemctl enable firewalld |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具