簡體   English   中英

如何通過QTcpServer連接2台計算機

[英]How to connect 2 machines through QTcpServer

我有一個程序(客戶端),需要連接到另一台計算機(服務器)。

問題是,我不知道我應該連接到哪個IP以及應該轉發到哪個端口。 這既到達服務器又到達客戶端。

假設我使用端口1234進行測試。

在我的服務器上,我有以下代碼:


MyServer.cpp

QString MyServer::StartServer()
{
QHostAddress ipAddress;
QList<QHostAddress> ipAddressList = QNetworkInterface::allAddresses();
for(int i=0;i<ipAddressList.size();i++)
{
    if(ipAddressList.at(i) != QHostAddress::LocalHost &&
       ipAddressList.at(i).toIPv4Address())
    {
        ipAddress = ipAddressList.at(i);
        break;
    }
}
if(ipAddressList.isEmpty())
    ipAddress = QHostAddress(QHostAddress::LocalHost);
if(listen(ipAddress,1234))
{
    qDebug() << this->serverAddress().toString();
    qDebug() << this->serverPort();
    return QString("Server online!");
}
else
    return QString("Error!");
}

在我進行的測試中,該IP將始終是我的內部IP(192.168.25.208)。 但是,在我的客戶端程序中,我永遠不知道要連接哪個IP。

這是我的客戶代碼:


MyClient.cpp

void Pesquisa::ConnectConfig()
{
    socket = new QTcpSocket(this);
    connect(socket,SIGNAL(connected()),this,SLOT(Connected()));
    connect(socket,SIGNAL(disconnected()),this,SLOT(Disconnected()));
    //What IP should I use here?
    socket->connectToHost("192.168.25.208",1234);
}

我應該連接到服務器正在運行的內部IP嗎? 機器(服務器)的外部IP? 另外,如果我需要使用外部IP ...,它是動態的,因此就是一個問題。

我認為問題不在於代碼本身。

如果要測試程序,並在計算機上同時運行服務器和客戶端,請讓服務器偵聽所有地址(但我不知道為什么您不允許在服務器代碼中使用本地主機),並且客戶端連接到本地主機(127.0.0.1)。

為了使服務器偵聽所有地址,我使用:

server->listen (QHostAddress::AnyIPv4, 1234);

無論如何,如果要從另一台計算機連接到服務器,則必須使用服務器PC的外部IP。

但是要做到這一點,您需要一個靜態IP。 通常,您可以向您的Internet提供商詢問靜態的。

主要問題

與本地計算機的連接有效,因為我將“內部IP”作為參數傳遞了。 這也是為什么它不能與其他機器一起使用的原因。 因此,將其更改為“外部IP”並使服務器偵聽所有IPv4(如Mattia F.所說)將建立外部連接。

像這樣:

客戶:

socket->connectToHost("177.157.4.38",1234)

服務器:

if(listen(QHostAddress::anyIPv4,1234))

一旦發現,就變得容易了,對嗎? 並不是的。 當我住在巴西時,在這里我們必須擁有靜態IP,而無需支付“少量”額外費用。

我的解決方案

我從“ No-IP”下載了名為“ DUC”的免費軟件,該軟件為您提供了動態IP的主機名,並每5分鍾檢查一次更改。 通過連接到該主機名,我設法從任何地方與服務器建立連接。

這是我給客戶的最后一行:

客戶:

socket->connectToHost("andsegcar.ddns.net",1234)

“ andsegcar.ddns.net”是由“ No-IP”創建的我的主機名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM