2016-02-29 256 views
1

我在使用QtNetwork連接計算機方面是全新的。網絡簡單網絡連接的簡單Qt代碼

現在我只想看到一個連接的嘗試。所以,我創建了一個GUI應用程序並在mainwindow.cpp我寫這兩個功能插槽,兩個按鈕:

void MainWindow::on_pbTalk_clicked(){ 
    QString IP = ui->leIP->text(); 
    ui->pteLog->appendPlainText("Now Talking to IP: " + IP); 
    talker = new Talker(); 
    talker->connectToHost(IP,25000); 
} 

void MainWindow::on_pbListen_clicked(){ 
    ui->pteLog->appendPlainText("Now listening on any port, I think"); 
    listener = new Listener(this); 
    if (!connect(listener, SIGNAL(newConnection()), this, SLOT(on_newConnections()))){ 
     ui->pteLog->appendPlainText("The connection of slot and signal failed!"); 
    } 
} 

現在發話本質上是一個與QTcpSocket沒有什麼重新實現了,只是還沒有。

監聽器是用下面的代碼CON Listener.cpp一個QTcpServer既可:

Listener::Listener(QObject *parent) : 
    QTcpServer(parent) 
{ 

    qDebug() << "Listening on any port"; 
    listen(QHostAddress::Any); 

} 

void Listener::incomingConnection(int socketDescriptor){ 
    qDebug() << "New connection: " << socketDescriptor; 
} 

於是我運行同一程序的兩個實例。一個在我的機器中。我運行該程序並按下Listen按鈕(IP 10.255.255.101)。

第二個實例在虛擬機(IP 10.255.255.215)中運行,我運行程序並按下Talk按鈕。這,據我所知應該試圖打開一個連接到IP(這是10.255.255.101)在端口25000,我應該得到一個「新連接」消息在控制檯。但是沒有這樣的消息出現。由於這不起作用,我沒有繼續前進。

任何人都可以告訴我我可能會做錯什麼嗎?

回答

3

檢查的QTcpServer::listen的documenation - 它說:

通知服務器偵聽地址地址 和端口端口傳入的連接。如果端口是0,則自動選擇一個端口。如果 地址是QHostAddress :: Any,服務器將監聽所有網絡的接口 。

QHostAddress::Any表示您正在監聽所有網絡接口,而不監聽端口。 (例如,如果你想只有一個本地服務器,您可以使用QHostAddress::LocalHost - 檢查QHostAddress::SpecialAddress的更像是

如果你想手動設置端口,你必須調用:

listen(QHostAddress::Any, 25000); 

如果沒有,你可以通過調用

quint16 port = serverPort(); 
+0

消息(我在控制檯上寫的文本)是錯誤的,沒有意識到。並且因爲我正在跟蹤一個沒有使用端口的例子....錯誤。它現在有效。我不喜歡閱讀文檔。非常感謝你。 – aarelovich

0

的「監聽任何端口上的」成語不適用於你的使用得到自動選擇端口;它不是UDP和TCP如何的意思是使用最有可能的。你不應該這樣設計你的通訊e專用端口。

如果你想構建一個數據包嗅探器,你必須使用爲此設計的平臺特定的機制。有些庫可以幫助你完成這個任務,其中最值得注意的是Windows上的WinPcap以及來自TcpDump項目的跨平臺libpcap