• 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
  • 相关阅读:
    java小知识点8
    MongoDB执行计划分析详解(1)
    面对Schema free 的MongoDB,如何规范你的schema
    Mongodb简介
    编程之法:面试和算法心得(最大连续乘积子串)
    编程之法:面试和算法心得(荷兰国旗)
    编程之法:面试和算法心得(奇偶调序)
    编程之法:面试和算法心得(最大连续子数组和)
    编程之法:面试和算法心得(寻找和为定值的多个数)
    744. Find Smallest Letter Greater Than Target
  • 原文地址:https://www.cnblogs.com/fuzhuoxin/p/12167298.html
Copyright © 2020-2023  润新知