기사 디렉토리
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 Linux의 코드 처리가 올바른지 여부
여기 Linux에서 여러 클라이언트 테스트 테스트를 작성합니다.
2.3 Linux 서버 포트가 열려 있지 않습니다(매우 중요합니다!).
거절하는 방법은 여러 가지가 있습니다
방법 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를 열고 싶습니다.
1단계: TCP 통신을 위해 포트 7799 열기
firewall-cmd --zone=public --add-port=7799/tcp --permanent
2단계: 방화벽 다시 시작
firewall-cmd --reload
3단계: 서버의 방화벽 규칙을 추가합니다. 이 단계를 수행하지 않으면 연결할 수 없습니다.
단계 분석:
1) 세 번째 단계를 수행하지 않으면 서버의 방화벽 규칙이 추가되지 않았기 때문에 접속할 수 없습니다.
firewall-cmd --list-port
2) 세 번째 단계만 수행하면 서버에서 추가한 방화벽 규칙을 찾을 수 없기 때문에 연결할 수 없습니다 .
방법 2: 방화벽을 끄고 포트를 엽니다.
방화벽 명령을 끕니다.systemctl stop firewalld
또는
방화벽 자체 시작을 직접 비활성화합니다. systemctl disable firewalld
— 방화벽 자체 시작으로 인해 포트를 사용할 수 없게 되는 것을 방지합니다.
복구 작업:
방화벽 명령을 시작합니다.systemctl start firewalld
부팅 시 방화벽이 자동으로 시작되도록 활성화:systemctl enable firewalld