Directorio de artículos
1. Código de conexión 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();
}
El código de procesamiento de Linux se omite aquí...
2. Análisis de problemas
2.1 Si la ip y el puerto están correctamente rellenados
Los prototipos de funciones de las dos funciones que se conectan al servidor en Qt:
Nota: quint16 = corto sin firmar
(1) El primer parámetro: IP en forma de QString, el segundo parámetro: el parámetro de quint16, y los dos últimos parámetros no necesitan completarse.
[virtual] void QAbstractSocket::connectToHost(
const QString &hostName,
quint16 port,
QIODevice::OpenMode openMode = ReadWrite,
QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
(2) El primer parámetro: IP en forma de QHostAddress, el segundo parámetro: el parámetro de quint16 (quint16 = corto sin firmar), y los dos últimos parámetros no necesitan ser llenados.
[virtual] void QAbstractSocket::connectToHost(
const QHostAddress &address,
quint16 port,
QIODevice::OpenMode openMode = ReadWrite)
2.2 Si el procesamiento de código de Linux es correcto
Aquí escribo varias pruebas de prueba de cliente en Linux
2.3 El puerto del servidor Linux no está abierto (¡esto es muy importante!)
Hay varias formas de rechazar
Método 1: abrir el puerto de una vez por todas
Primero enumere los comandos que deben usarse:
(1) Ver todos los puertos abiertos
firewall-cmd --list-port
(2) Comprobar si un puerto está abierto
firewall-cmd --query-port=端口号/协议(tcp/udp)
(3) Abra el puerto
firewall-cmd --zone=public --add-port=端口号/协议(tcp/udp) --permanent
(4) Retire el puerto
firewall-cmd --zone=public --remove-port=端口号/协议(tcp/udp) --permanent
(5) Reinicie el cortafuegos
firewall-cmd --reload
Ejemplo: Por ejemplo, quiero abrir el puerto 7799
Paso 1: Abra el puerto 7799 para la comunicación TCP
firewall-cmd --zone=public --add-port=7799/tcp --permanent
Paso 2: reinicia el cortafuegos
firewall-cmd --reload
Paso 3: Agregue las reglas de firewall del servidor, si no realiza este paso, no podrá conectarse
Análisis de pasos:
1) Si no realiza el tercer paso, no podrá conectarse, porque no se agregaron las reglas de firewall del servidor.
2) Si solo realiza el tercer paso, no podrá conectarse, porque no puede firewall-cmd --list-port
encontrar las reglas de firewall agregadas por el servidor.
Método 2: apague el firewall y abra el puerto
Desactive el comando del cortafuegos:systemctl stop firewalld
o
Deshabilite directamente el inicio automático del firewall: systemctl disable firewalld
evite que el inicio automático del firewall provoque que los puertos queden inutilizables
Operación de recuperación:
Inicie el comando del cortafuegos:systemctl start firewalld
Habilite el firewall para que se inicie automáticamente en el momento del arranque:systemctl enable firewalld