-
獲得本機網絡信息
QHostInfo::localHostName();
獲得主機信息
QList<QHostAddress> listAddress = hostInfo.addresses();
獲得主機的IP地址列表QString detail=""; QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(); // 獲得主機的IP地址和網絡接口列表 for(int i=0;i<list.count();i++) { QNetworkInterface interface=list.at(i); detail=detail+tr("設備:")+interface.name()+"\n"; // 獲得網絡接口的名稱 detail=detail+tr("硬件地址:")+interface.hardwareAddress()+"\n"; // 獲得網絡接口的硬件地址 QList<QNetworkAddressEntry> entryList=interface.addressEntries();// 獲得每個網絡接口包括0或多個IP地址,包括子網掩碼和廣播地址 for(int j=1;j<entryList.count();j++) { QNetworkAddressEntry entry=entryList.at(j); detail=detail+"\t"+tr("IP 地址:")+entry.ip().toString()+"\n"; detail=detail+"\t"+tr("子網掩碼:")+entry.netmask().toString() +"\n"; detail=detail+"\t"+tr("廣播地址:")+entry.broadcast().toString() +"\n"; } } QMessageBox::information(this,tr("Detail"),detail);
-
基於UDP的工作原理
UDP發送的是報文,報文大小不能超過64KB;
UDP通信不與服務器建立連接,只負責調用發送函數向服務器發送數據報。服務器也從不接受連接,只負責調用接收函數,等待客戶端的數據到達。
QT中通過QUdpSocket實現UDP協議的編程。
服務器端發送信息udpSocket = new QUdpSocket(this); port = 5555;// 指定UDP廣播端口號 QString msg = TextLineEdit->text();// 發送信息 int length=0; if(msg=="") { return; } if((length=udpSocket->writeDatagram(msg.toLatin1(), msg.length(),QHostAddress::Broadcast,port))!=msg.length()) { return; }
客戶端接受信息
port =5555; // 設置UDP的端口號參數,指定在此端口上監聽數據 udpSocket = new QUdpSocket(this); // 創建一個QUdpSocket connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));// 連接QIODevice的readyRead()信號 bool result=udpSocket->bind(port); // 綁定到指定的端口上,result爲false時端口不可用 void UdpClient::dataReceived() { while(udpSocket->hasPendingDatagrams()) // 判斷是否有數據報可讀,hasPendingDatagrams方法至少有一個數據報可讀是返回true { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); // 獲得第一個數據報長度 udpSocket->readDatagram(datagram.data(),datagram.size());// 讀取數據報 QString msg=datagram.data(); // 數據內容 } }
-
基於TCP的工作原理
TCP傳輸控制協議(Transmission Control Protocol)是一種可靠的、面向連接、面向數據流的傳輸協議。
HTTP/FTP等高層應用協議以TCP爲基礎。
TCP適合連續數據傳輸。
-
TCP與UDP的比較
QT 網絡與通信之客戶端(UDP)以及TCP和UDP比較
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.