《qt网络应用----socket通信例子》由会员分享,可在线阅读,更多相关《qt网络应用----socket通信例子(7页珍藏版)》请在金锄头文库上搜索。
1、Qt 网络应用-socket 通信例子 1.我们新建 Qt4 Gui Application,工程名为“udpone”,选中QtNetwork 模块,Base class 选择 QMainWindow。(说明:如果一些Qt Creator 版本没有添加模块一项,我们就需要在工程文件 tcpServer.pro中添加一行代码:QT += network)2.在 mainwindow.ui 中添加 2 个文本编辑框(Text Edit),左边的那个的objectName 改为为 textSend,右边的那个的 objectName 改为textReceive,添加一个按钮,改其 objectNam
2、e 为 send,如下所示:3.在 mainwindow.h 文件中加入#include ,添加 public 变量 QHostAddress *hostaddr1;和 QHostAddress *hostaddr2;添加 private 变量 QUdpSocket *udpSocket1;和 QUdpSocket *udpSocket2;添加私有槽函数:private slots:void send();void receive();4.在 mainwindow.cpp 文件中,加入如下代码:(1)在构造函数中添加:udpSocket1=new QUdpSocket(this);udpSoc
3、ket2=new QUdpSocket(this);hostaddr1 = new QHostAddress(192.168.253.106);hostaddr2 = new QHostAddress(192.168.253.188);bool conn=udpSocket1-bind(*hostaddr1,6666,QUdpSocket:ShareAddress);/监听本机上的6666 端口,如果有消息到来,就会发送 readyRead()信号。if(!conn)QMessageBox box;box.setText(tr(连接错误);box.exec();elseconnect(udpS
4、ocket1,SIGNAL(readyRead(),this,SLOT(receive();connect(ui-send,SIGNAL(clicked(),this,SLOT(send();(2)实现 send 函数:void MainWindow:send()QMessageBox box;QString text=ui-textSend-toPlainText();if(text.length()=0)box.setText(tr(请输入发送内容);box.exec();udpSocket2-writeDatagram(text.toUtf8(),text.length(),*hosta
5、ddr2,6665);/向IP 为 192.168.253.188 的机器的 6665 端口发送数据 (3)实现 receive 函数 :void MainWindow:receive()while(udpSocket1-hasPendingDatagrams() QByteArray data;data.resize(udpSocket1-pendingDatagramSize();udpSocket1-readDatagram(data.data(),data.size();QString str = data.data();ui-textReceive-insertPlainText(s
6、tr+n);OK,完成一半!上面这个程序需要运行在 IP 为 192.168.253.106 的机器上!下面将要做的是另外一个工程,需要运行在 IP 为 192.168.253.188 的机器上。下面这个工程相对上面那个工程几乎没变化,只是把 hostaddr1 和hostaddr2 的地址掉换了一下,把发送和接受的端口互换了一下。1.我们新建 Qt4 Gui Application,工程名为“udptwo”,选中QtNetwork 模块,Base class 选择 QMainWindow。(说明:如果一些Qt Creator 版本没有添加模块一项,我们就需要在工程文件 tcpServer.p
7、ro中添加一行代码:QT += network)2.在 mainwindow.ui 中添加 2 个文本编辑框(Text Edit),左边的那个的objectName 改为为 textSend,右边的那个的 objectName 改为textReceive,添加一个按钮,改其 objectName 为 send,如下所示:3.在 mainwindow.h 文件中加入#include ,添加 public 变量 QHostAddress *hostaddr1;和 QHostAddress *hostaddr2;添加 private 变量 QUdpSocket *udpSocket1;和 QUdpS
8、ocket *udpSocket2;添加私有槽函数:private slots:void send();void receive();4.在 mainwindow.cpp 文件中,加入如下代码:(1)在构造函数中添加:udpSocket1=new QUdpSocket(this);udpSocket2=new QUdpSocket(this);hostaddr1 = new QHostAddress(192.168.253.188);hostaddr2 = new QHostAddress(192.168.253.106);bool conn=udpSocket1-bind(*hostaddr
9、1,6665,QUdpSocket:ShareAddress);/监听本机上的6665 端口,如果有消息到来,就会发送 readyRead()信号。if(!conn)QMessageBox box; box.setText(tr(连接错误);box.exec();elseconnect(udpSocket1,SIGNAL(readyRead(),this,SLOT(receive();connect(ui-send,SIGNAL(clicked(),this,SLOT(send();(2)实现 send 函数:void MainWindow:send()QMessageBox box;QStr
10、ing text=ui-textSend-toPlainText();if(text.length()=0)box.setText(tr(请输入发送内容);box.exec();udpSocket2-writeDatagram(text.toUtf8(),text.length(),*hostaddr2,6666);/向IP 为 192.168.253.106 的机器的 6666 端口发送数据(3)实现 receive 函数 :void MainWindow:receive()while(udpSocket1-hasPendingDatagrams() QByteArray data;data
11、.resize(udpSocket1-pendingDatagramSize();udpSocket1-readDatagram(data.data(),data.size(); QString str = data.data();ui-textReceive-insertPlainText(str+n);两个机器上同时运行这两个程序,效果如下:192.168.253.106 机器上的程序运行后,输入 one,点击发送后,会在192.168.253.188 机器上的右边文本编辑框内显示出来。同样,192.168.253.188 机器上的程序运行后,输入 two,点击发送后,会在192.168.253.106 机器上的右边文本编辑框内显示出来。