近期寫大作業用到qt的socket部分。網上關於這部分的資料都太過複雜,如今總結一下一些簡單的應用。有機會能夠給大家講講用socket傳送檔案的**。
這裡主要解說怎樣實現tcp和udp的簡單通訊。
在linux下進行網路程式設計。我們能夠使用linux提供的統一的套接字介面。
可是這樣的方法牽涉到太多的結構體,比方ip位址,埠轉換等,不熟練的人往往easy犯這樣那樣的錯誤。qt中提供的socket全然使用了類的封裝機制,使使用者不須要接觸底層的各種結構體操作。並且它採用qt本身的signal-slot機制。使編寫的程式更easy理解。
這是文件。
個人認為,qt的文件除了缺少一些樣例,其它還是不錯的。
qt5中相比於qt4應該更新了一些socket的應用。qt4相比於qt3也更新了不少。並且還改了非常多的類名。大家在網上找資料的時候一定要注意。
udp沒有特定的server端和client端,簡單來說就是向特定的ip傳送報文,因此我把它分為傳送端和接收端。
注意:在.pro檔案裡要加入qt += network。否則無法使用qt的網路功能。
#include
qudpsocket *sender;
sender = new qudpsocket(this);
qbytearray datagram = 「hello world!」;
//udp廣播
sender->writedatagram(datagram.data
(),datagram.size(),qhostaddress::broadcast,6665);
//向特定ip傳送
qhostaddress serveraddress = qhostaddress("10.21.11.66");
sender->writedatagram(datagram.data
(), datagram.size(),serveraddress, 6665);
/* writedatagram函式原型,傳送成功返回位元組數,否則-1
qint64 writedatagram(const char *data,qint64 size,const qhostaddress &address,quint16 port)
qint64 writedatagram(const qbytearray &datagram,const qhostaddress &host,quint16 port)
*/
#include
qudpsocket *receiver;
//訊號槽
private slots:
void readpendingdatagrams();
receiver =
new qudpsocket(this);
receiver->bind(qhostaddress::localhost, 6665);
connect(receiver, signal(readyread()),this, slot(readpendingdatagrams()));
void readpendingdatagrams()
}
tcp的話要複雜點,必須先建立連線才幹資料傳輸,分為server端和client端。
#include
qtcpsocket *client;
char *data="hello qt!";
client = new qtcpsocket(this);
client->connecttohost(qhostaddress("10.21.11.66"), 6665);
client->write(data);
tcp server端
#include
qtcpserver *server;
qtcpsocket *clientconnection;
server = new qtcpserver();
server->listen(qhostaddress::any, 6665);
connect(server, signal(newconnection()), this, slot(acceptconnection()));
void acceptconnection()
void readclient()
至於傳中文亂碼的問題,事實上能夠在前面的文章中解決。
也能夠看看這個。
QT 程序間通訊 Socket通訊
通過qt提供的qtnetwork模組即可實現程序間通訊,tcp ip在實現應用程式和程序內部通訊或與遠端程序間的通訊方面非常有用。qtnetwork模組提供的類能夠建立基於tcp ip的客戶端與服務端應用程式。為實現底層的網路訪問,可以使用qtcpsocket qtcpserver和qudpsock...
Qt中的Socket通訊
qt中的socket通訊 qt中提供的所有的socket類都是非阻塞的。qt中常用的用於socket通訊的套接字類 tcpserver.h class tcpserver public qmainwindow tcpserver.cpp tcpserver tcpserver qwidget par...
QT中的SOCKET的通訊
1 服務端程式 cpp view plain copy print?ui widget.h ifndef ui widget h define ui widget h include include include include include include include qt begin n...