Socket之UDP

时间:2020-01-08
本文章向大家介绍Socket之UDP,主要包括Socket之UDP使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

  相对于TCP/IP来说,UDP更像是发快递和写信,不需要判断和对方和对方连通就可以发送,而TCP/IP必须确认连通之后才可以发送,这样UDP通讯其实不能严格按照TCP/IP的说法区分服务器和客户端,对于每一个客户端来说,只要知道对方地址和端口就可以直接发送,看是一个客户端身份,但是要想接受来自其它客户端发来的消息,就得绑定端口号,如果不绑定,只能发送信息,不能接收,这样看又是一个服务器身份。

  • 互相访问的效果如下:
  • 参考代码如下:

  客户端.h文件:

 1 #ifndef UDPSOCEKT_H
 2 #define UDPSOCEKT_H
 3 
 4 #include <QWidget>
 5 #include <QUdpSocket>
 6 #include <QHostAddress>
 7 #include <QString>
 8 
 9 namespace Ui {
10 class udpSocekt;
11 }
12 
13 class udpSocekt : public QWidget
14 {
15     Q_OBJECT
16 
17 public:
18     explicit udpSocekt(QWidget *parent = 0);
19     ~udpSocekt();
20 
21 private slots:
22     void on_sendbutton_clicked();
23 
24     void on_closebutton_clicked();
25 
26     void dealdata();
27 private:
28     Ui::udpSocekt *ui;
29     QUdpSocket *Udpsocket;
30 };
31 
32 #endif // UDPSOCEKT_H
View Code

  客户端.CPP文件:

 1 #include "udpsocekt.h"
 2 #include "ui_udpsocekt.h"
 3 
 4 udpSocekt::udpSocekt(QWidget *parent) :
 5     QWidget(parent),
 6     ui(new Ui::udpSocekt)
 7 {
 8     ui->setupUi(this);
 9     setWindowTitle("客户端1:6666");
10     Udpsocket = new QUdpSocket(this);
11     //绑定端口(声明自己的端口)以便别人访问
12     Udpsocket->bind(6666);
13     connect(Udpsocket,&QUdpSocket::readyRead,this,&udpSocekt::dealdata);
14 }
15 
16 udpSocekt::~udpSocekt()
17 {
18     delete ui;
19 }
20 void udpSocekt::dealdata()
21 {
22     char buf[800] = {0};//读取对方的内容长度
23     QHostAddress Addr;//对方地址
24     quint16 port;//对方端口
25     qint64 str = Udpsocket->readDatagram(buf,sizeof(buf),&Addr,&port);
26     if(str>0)
27     {
28         //字符串组包
29         QString showData = QString("[%1:%2] %3").arg(Addr.toString()).arg(port).arg(buf);
30         ui->display->append(showData);
31     }
32 }
33 void udpSocekt::on_sendbutton_clicked()
34 {
35 //从输入框获取端口和访问的IP
36     QString ip = ui->ip->text();
37     quint16 port = ui->port->text().toInt();
38     QString text = ui->send->text();
39 
40     //执行发送
41     Udpsocket->writeDatagram(text.toUtf8(),QHostAddress(ip),port);
42 
43 }
44 
45 void udpSocekt::on_closebutton_clicked()
46 {
47     Udpsocket->disconnectFromHost();
48     Udpsocket->close();
49 }
View Code

原文地址:https://www.cnblogs.com/fuzhuoxin/p/12167298.html