成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt 中Socket編程實例

移動開發(fā)
本文章所講述的內(nèi)容是關(guān)于Qt中Socket編程,對于socket,大家并不陌生,應(yīng)用程序調(diào)用socket函數(shù)來創(chuàng)建一個能夠進行網(wǎng)絡(luò)通信的套接字。

SOCKET socket( int af, int type, int protocol ); 應(yīng)用程序調(diào)用socket函數(shù)來創(chuàng)建一個能夠進行網(wǎng)絡(luò)通信的套接字。第一個參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于TCP/IP協(xié)議族,該參數(shù)置AF_INET; 第二個參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報套接字類型為SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不適用某種特定的協(xié)議去封裝它,而是由程序自行處理數(shù)據(jù)報以及協(xié)議首部);第三個參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。

在LINUX下進行網(wǎng)絡(luò)編程,我們可以使用LINUX提供的統(tǒng)一的套接字接口。但是這種方法牽涉到太多的結(jié)構(gòu)體,比如IP地址,端口轉(zhuǎn)換等,不熟練的人往往容易犯這樣那樣的錯誤。QT中提供的SOCKET完全使用了類的封裝機制,使用戶不需要接觸底層的各種結(jié)構(gòu)體操作。而且它采用QT本身的signal-slot機制,使編寫的程序更容易理解。

QT中共提供四個與套按字相關(guān)的類,分別是:

  1. QServerSocket:TCP-based server  
  2. QSocket:   Buffered TCP connection  
  3. QSocketDevice:  Platform-independent low-level socket API  
  4. QSocketNotifier: Support for socket callbacks 

下面介紹使用QT進行網(wǎng)絡(luò)編程,我們使用一個簡單的C/S模式網(wǎng)絡(luò)程序說明如何使用QT中的套接字。同時我們用TCP和UDP兩種協(xié)議實現(xiàn)這個程序(該程序客戶端與服務(wù)端各向?qū)Ψ桨l(fā)送一個字符口串“abc”)

1、UDP實現(xiàn)

     UDP是不連接協(xié)議,沒有客戶端與服務(wù)端的概念。

(1)建立套接字相關(guān)對象

  1. QSocketDevice *MUReceiveSocket;   //套接字對象  
  2. QSocketNotifier *MSocketNotifier;     //套接字監(jiān)聽對象 

(2)初始化套接字相關(guān)對象

  1. MUReceiveSocket=new QSocketDevice(QSocketDevice::Datagram);    
  2. //UDP初始化  
  3. QHostAddress MyAddress;  
  4. QString FakeAddress;  
  5. FakeAddress = get_eth1_ip();  //取得接口IP  
  6. MyAddress.setAddress(FakeAddress);  
  7. MUReceiveSocket->bind(MyAddress,Port);    
  8. //綁定到指定網(wǎng)絡(luò)接口地址(IP),指定邏輯端口  
  9. MSocketNotifier = new QSocketNotifier(MUReceiveSocket->socket(),QSocketNotifier::Read,0,"MSocketNotifier");  
  10. //監(jiān)聽MUReceiveSocket套接字 

(3)定義用實現(xiàn)響應(yīng)slot

  1. virtual void OnMReceive();  
  2. void Client::OnMReceive(){  
  3. int ByteCount,ReadCount;  
  4. char *IncommingChar;  
  5. fprintf(stderr,"Load a piece of Message!\n");  
  6. ByteCount=MUReceiveSocket->bytesAvailable();  
  7. IncommingChar=(char *)malloc(ByteCount+1);  
  8. ReadCount=MUReceiveSocket->readBlock(IncommingChar,ByteCount);  
  9. IncommingChar[ByteCount]='\0';  
  10. fprintf(stderr,“%s“,IncommingChar);  //打印接收的字符串  
  11.            } 

(4)關(guān)聯(lián)套接字的signal和接收slot

  1. connect(MSocketNotifier,SIGNAL(activated(int)),this,SLOT(OnMReceive()));  
  2. //當(dāng)MSocketNotifier檢測到MUReceiveSocket活躍時調(diào)用OnMReceive 

(5)發(fā)送字符串

  1. char information[20];  
  2. strcpy(information,“abc“);  
  3. MUReceiveSocket->writeBlock(information,length,MyAddress,2201);  

2、TCP實現(xiàn)

TCP的實現(xiàn)與UDP的實現(xiàn)大同小異,它是面象連接的協(xié)議。這里只介紹與UDP不同的地方。

服務(wù)端:

(1)套接字對象的定義

比UDP多定義一個套接字,一個用來監(jiān)聽端口,一個用來通信。
建立一個QSSocket類繼承QServerSocket

  1. QSSocket *ServerSocket;    //TCP-based server  
  2. QSocketDevice *ClientSocket;  
  3. QSocketNotifier *ClientNotifier;  
  4. QSocketNotifier *ServerNotifier; 

(2)套接字的初始化

  1. QHostAddress MyAddress;  
  2. QString FakeAddress;  
  3. FakeAddress = "127.0.0.1";  
  4. MyAddress.setAddress(FakeAddress);  
  5. UINT Port=1234;  
  6. ServerSocket=new QSSocket(MyAddress,Port,this,0);   //指定監(jiān)聽地址及端口  
  7. //這里也可以使用QServerSocket類  
  8.  ClientSocket=new QSocketDevice(QSocketDevice::Stream);  
  9. ClienttNotifier = new QSocketNotifier(ClientSocket->socket(),QSocketNotifier::Read,0,"ClientSocket"); 

(3)響應(yīng)連接

只需要在QSSocket的構(gòu)造函數(shù)里添加如下代碼:

  1. ServerSocket->newConncetion(ClientSocket->socket()); 

當(dāng)收到客戶端的連接后,ClientSocket自動響應(yīng),并接收數(shù)據(jù)。

(4)接收信息slot與UDP一致,這里不在敘述。

客戶端實現(xiàn):

客戶端的實現(xiàn)與UDP實現(xiàn)大同小異,不同的地方只是客戶端套接字不需要bind端口,因為連接上服務(wù)端后TCP會保持這個連接,直到通信的結(jié)束。

小結(jié):對于本篇文章實現(xiàn)Qt 中Socket編程,講解到這,客戶端和服務(wù)端的實現(xiàn)很important!實現(xiàn)套接字的網(wǎng)絡(luò)通信。希望本文對你有幫助!!!

【編輯推薦】

淺談Qt中多線程編程

在Qt中如何寫控制臺程序

Qt網(wǎng)絡(luò)之獲取本機網(wǎng)絡(luò)信息

Qt 平臺中使GUI保持響應(yīng)流暢

基于Qt Web瀏覽器設(shè)計與實現(xiàn)

深度解析嵌入式QT開發(fā)環(huán)境搭建

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-20 13:43:08

Qt Socket 線程

2011-06-22 16:18:23

QT 多線程 QSocket

2011-06-21 14:12:14

Qt Linux 登錄界面

2021-01-11 05:09:07

Android通信Qt

2011-06-13 10:03:19

Qt 多線程 編程

2011-06-30 17:31:32

Qt 多線程 信號

2011-06-14 10:52:10

QT QTreeView

2011-06-30 16:38:07

Qt QTableWidg

2022-10-24 08:01:32

Sockets網(wǎng)絡(luò)協(xié)議

2016-11-04 21:37:16

PythonSocket

2012-03-19 11:41:30

JavaSocket

2010-03-03 16:19:29

Python Sock

2015-03-10 13:43:00

JavaSocket編程編程

2013-03-26 12:46:23

Android開發(fā)So

2011-06-30 17:01:43

Qt Creator 菜單欄

2009-06-23 14:08:00

Java Socket

2013-03-27 13:26:04

Android開發(fā)Socket

2011-08-30 14:15:34

QTSQLite數(shù)據(jù)庫

2011-07-05 14:46:34

2011-06-27 16:07:49

Qt Designer
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产999精品久久久 午夜天堂精品久久久久 | 天堂久久天堂综合色 | 亚洲欧洲一区二区 | 97视频久久 | 99热这里都是精品 | 综合久久久 | 欧美一区二区三区日韩 | 日韩电影一区二区三区 | 欧美激情一区 | 久久久久久亚洲欧洲 | 国产乱码精品一区二区三区忘忧草 | 黄色片网站在线观看 | 狠狠热视频 | 狠狠躁夜夜躁人人爽天天高潮 | 色姑娘综合网 | 欧美一区二区三区国产 | 99免费视频 | 欧美一级欧美三级在线观看 | 欧美亚洲国产成人 | 亚洲欧美中文日韩在线v日本 | 国产午夜高清 | 91美女在线观看 | 国产一区二区 | 国产成人久久精品一区二区三区 | 人人射人人插 | 国产综合第一页 | 欧美三区 | 国产在线精品一区二区 | 午夜欧美一区二区三区在线播放 | 国产伊人精品 | 亚洲毛片在线观看 | 中文字幕在线观看日韩 | 中文字幕国产一区 | 欧美日韩国产三级 | 水蜜桃久久夜色精品一区 | 中文字幕一区二区三区四区五区 | 欧美不卡视频一区发布 | 欧美黄色一区 | 亚洲午夜一区二区 | 免费一级做a爰片久久毛片潮喷 | 中文字幕免费视频 |