[id-0005] Qt客户端连接不上服务器?

文章详细分析了Qt客户端在尝试连接服务器时可能遇到的问题,包括IP和端口设置、服务器端代码的正确性以及服务器端口是否开放。提到了使用`firewall-cmd`命令来检查和开放端口,并提供了关闭防火墙的临时解决方案。重点强调了开放服务器端口对于成功连接的重要性。
摘要由CSDN通过智能技术生成

1. Qt连接代码

void Client::toConnect()
{
    if (isConnecting || QAbstractSocket::ConnectingState == tcpSocket->state())
        return;
    //    tcpSocket->abort();
    QString ip = SERVER_IP;
    quint16 port = SERVER_PORT;
    //	 qDebug()<<"服务器IP:"<<ip<<", 端口号:"<<port;
    tcpSocket->connectToHost(QHostAddress(ip), port); //核心语句
    //    tcpSocket->waitForConnected();
}

这里省略Linux处理代码…


2. 问题分析

2.1 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.2 服务器端的代码是否正确

这里自己在服务器上编写几个客户端测试测试。


2.3 服务器端口未开放?(这个很重要!)

有几种方法拒绝

方法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通信

firewall-cmd --zone=public --add-port=7799/tcp --permanent

第二步: 重启一下防火墙

firewall-cmd --reload

第三步: 添加服务器的防火墙规则,这一步不弄也是连接不上的

在这里插入图片描述

步骤分析:

1)第三步不弄的话也是连接不上的,因为没添加务器的防火墙规则。

2)如果只是弄了第三步,那也是连接不上的,因为使用firewall-cmd --list-port是查不到服务器添加的防火墙规则。

方法2:关闭防火墙,去开放端口

关闭防火墙命令: systemctl stop firewalld

或者

直接禁用防火墙自启: systemctl disable firewalld — 防止防火墙自启导致端口无法使用

恢复操作:

启动防火墙命令: systemctl start firewalld

启动防火墙开机自启: systemctl enable firewalld


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天鹅打架了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值