Qt自動獲取本機IP與TCP客戶端繫結IP和埠
阿新 • • 發佈:2019-02-11
客戶端使用特定的埠號與伺服器進行通訊,這是在進行網路程式設計開發時候經常容易遇到的問題。這篇部落格是關於網路程式設計中客戶端編寫的小總結。
繫結埠號
在Qt的Socket開發中,有豐富的函式可以呼叫,要實現客戶端繫結指定的埠,只需要在建立Socket之後,呼叫bind(port)函式進行埠的繫結即可。
繫結IP和埠
直接呼叫QHostAddress建構函式產生一個IP地址,呼叫bind()函式的另一個過載函式bind(IP,port)進行IP和埠的繫結。為了除錯與上網工作兩不誤,這裡有一個小技巧,將電腦網絡卡配置為多IP,客戶對除錯的IP進行繫結,同時不影響主IP的正常使用,可以參照我的部落格“”。擷取部分程式碼如下
QHostAddress localIP = QHostAddress("30.252.22.10"); IP = IPaddrLineEdit->text(); port = portLineEdit->text().toInt(); clientSocket->abort(); if(clientSocket->bind(localIP,42005)) { qDebug() << "1 LocalHost:" << localIP.toString(); qDebug() << "2 localPort:" << clientSocket->localPort(); } clientSocket->connectToHost(IP,port);
自動搜尋本機IP
獲取本機所有IP,QNetworkInterface類中提供了一個便利的靜態函式allAddresses(),用於返回一個QHostAddress主機地址列表。參考自https://blog.csdn.net/liang19890820/article/details/52273986。下面是獲取本地IPv4的程式碼實現
QList<QHostAddress> list = QNetworkInterface::allAddresses(); foreach (QHostAddress address, list) { if(address.protocol() == QAbstractSocket::IPv4Protocol) { if(address.toString().contains("127.0.")) continue; qDebug() << "Address : " << address.toString(); } else if (address.isNull()) // 主機地址為空 continue; }