作業系統:arm-linux
qt版本:qt-2.3.2-for-linux
gui:qtopia
在linux 下進行網路程式設計,我們可以使用linux提供的統一的套接字介面。但是這種方法牽涉到太多的結構體,比如ip位址,埠轉換等,不熟練的人往往容易犯這樣 那樣的錯誤。qt中提供的socket完全使用了類的封裝機制,使使用者不需要接觸底層的各種結構體操作。而且它採用qt本身的signal-slot機 制,使編寫的程式更容易理解。
qt中共提供四個與套按字相關的類,分別是:
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多定義乙個套接字,乙個用來監聽埠,乙個用來通訊。
qsocketdevice *serversocket;
qsocketdevice *clientsocket;
qsocketnotifier *clientnotifier;
qsocketnotifier *servernotifier;
2)套接字的初始化
qhostaddress myaddress;
qstring fakeaddress;
fakeaddress = "127.0.0.1";
myaddress.setaddress(fakeaddress);
uint port=1234;
serversocket=new qsocketdevice(qsocketdevice::stream);
clientsocket=new qsocketdevice(qsocketdevice::stream);
serversocket->bind(myaddress,port);
serversocket->listen(20); //20代表所允許的最大連線數
clienttnotifier = new qsocketnotifier(clientsocket->socket(),qsocketnotifier::read,0,"clientsocket");
servernotifier = new qsocketnotifier(serversocket->socket(),qsocketnotifier::read,0,"serversocket");
3)響應連線(在定義slot中響應)
當收到客戶端的連線後,響應它,並以clientsocket接收:
serversocket->setsocket(clientsocket->socket());
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完全...