作業系統:arm-linux
qt版本:qt-2.3.2-for-linux
gui:qtopia
在linux下進行網路程式設計,我們可以使用linux提供的統一的套接字介面。但是這種方法牽涉到太多的結構體,比如ip位址,埠轉換等,不熟練的人往往容易犯這樣那樣的錯誤。qt中提供的socket完全使用了類的封裝機制,使使用者不需要接觸底層的各種結構體操作。而且它採用qt本身的signal-slot機制,使編寫的程式更容易理解。
qserversocket:tcp-based server
qsocket: buffered tcp connection
qsocketdevice: platform-independent low-level socket api
qsocketnotifier: support for socket callbacks
下面介紹使用qt進行網路程式設計,我們使用乙個簡單的c/s模式網路程式說明如何使用qt中的套接字。同時我們用tcp和udp兩種協議實現這個程式(該程式客戶端與服務端各向對方傳送乙個字元口串「abc」)
1、udp實現
udp是不連線協議,沒有客戶端與服務端的概念。
1)建立套接字相關物件
qsocketdevice *mureceivesocket; //套接字物件
qsocketnotifier *msocketnotifier; //套接字監聽物件
2)初始化套接字相關物件
mureceivesocket=new qsocketdevice(qsocketdevice::datagram);
//udp初始化
qhostaddress myaddress;
qstring fakeaddress;
fakeaddress = get_eth1_ip(); //取得介面ip
myaddress.setaddress(fakeaddress);
mureceivesocket->bind(myaddress,port);
//繫結到指定網路介面位址(ip),指定邏輯埠
msocketnotifier = new qsocketnotifier(mureceivesocket->socket(),qsocketnotifier::read,0,"msocketnotifier");
//監聽mureceivesocket套接字
3)定義用實現響應slot
virtual void onmreceive();
void client::onmreceive()
4)關聯套接字的signal和接收slot
connect(msocketnotifier,signal(activated(int)),this,slot(onmreceive()));
//當msocketnotifier檢測到mureceivesocket活躍時呼叫onmreceive
5)傳送字串
char information[20];
strcpy(information,「abc「);
mureceivesocket->writeblock(information,length,myaddress,2201);
2、tcp實現
tcp的實現與udp的實現大同小異,它是面象連線的協議。這裡只介紹與udp不同的地方。
服務端:
1)套接字物件的定義
比udp多定義乙個套接字,乙個用來監聽埠,乙個用來通訊。
建立乙個qssocket類繼承qserversocket
qssocket *serversocket; //tcp-based server
qsocketdevice *clientsocket;
qsocketnotifier *clientnotifier;
qsocketnotifier *servernotifier;
2)套接字的初始化
qhostaddress myaddress;
qstring fakeaddress;
fakeaddress = "127.0.0.1";
myaddress.setaddress(fakeaddress);
uint port=1234;
serversocket=new qssocket(myaddress,port,this,0); //指定監聽位址及埠
//這裡也可以使用qserversocket類
clientsocket=new qsocketdevice(qsocketdevice::stream);
clienttnotifier = new qsocketnotifier(clientsocket->socket(),qsocketnotifier::read,0,"clientsocket");
3)響應連線
只需要在qssocket的建構函式裡新增如下**:
serversocket->newconncetion(clientsocket->socket());
當收到客戶端的連線後,clientsocket自動響應,並接收資料。
4)接收資訊slot與udp一致,這裡不在敘述。
客戶端實現:
客戶端的實現與udp實現大同小異,不同的地方只是客戶端套接字不需要bind埠,因為連線上服務端後tcp會保持這個連線,直到通訊的結束。
Qt中socket程式設計
在linux下進行網路程式設計,我們可以使用linux提供的統一的套接字介面。但是這種方法牽涉到太多的結構體,比如ip位址,埠轉換等,不熟練的人往往容易犯這樣那樣的錯誤。qt中提供的socket完全使用了類的封裝機制,使使用者不需要接觸底層的各種結構體操作。而且它採用qt本身的signal slot...
QT中的SOCKET程式設計
作業系統 arm linux qt版本 qt 2.3.2 for linux gui qtopia 在linux下進行網路程式設計,我們可以使用linux提供的統一的套接字介面。但是這種方法牽涉到太多的結構體,比如ip位址,埠轉換等,不熟練的人往往容易犯這樣那樣的錯誤。qt中提供的socket完全使...
QT中的SOCKET程式設計
作業系統 arm linux qt版本 qt 2.3.2 for linux gui qtopia 在linux 下進行網路程式設計,我們可以使用linux提供的統一的套接字介面。但是這種方法牽涉到太多的結構體,比如ip位址,埠轉換等,不熟練的人往往容易犯這樣那樣的錯誤。qt中提供的socket完全...