目录

  • 1. Qt连接代码
  • 2. 问题分析以及解决方法
  • 2.1 服务器IP是否能被Ping通?
  • 2.2 客户端中的服务器IP和Port是否填写正确?
  • 2.3 Linux的代码处理是否正确?
  • 2.4 Linux服务器端口是否开放(很重要)?
  • 2.4.1 开放端口(一劳永逸,推荐!)
  • 2.4.2 关闭防火墙(开放所有端口,不推荐!)

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

-->Linux防火墙与端口操作命令


实例说明:开放端口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

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

威联通无法执行创建docker命令 威联通qfile 无法连接_IP

步骤分析:

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


2.4.2 关闭防火墙(开放所有端口,不推荐!)

这里也有两种方法,第一种麻烦但是相对安全,第二种方便但是很不安全。

方法一:每次通信时都去关闭防火墙

方法二:关闭防火墙之后,再禁用防火墙自启,防止防火墙自启导致端口无法使用

作用

命令

关闭防火墙

systemctl stop firewalld

禁用防火墙自启

systemctl disable firewalld

启动防火墙

systemctl start firewalld

启动防火墙开机自启

systemctl enable firewalld