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
客户端.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 }
原文地址:https://www.cnblogs.com/fuzhuoxin/p/12167298.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用Microsoft Teams Updater执行代码
- 腾讯云 Serverless 云函数实现 CKafka 数据转存到 ES
- 软硬件都开源!基于千兆以太网的温度传感应用
- 【赵渝强老师】使用Docker Compose进行服务编排
- Kubernetes Pod入门指南
- Java线程池深度揭秘
- 蒙特卡洛法求积分
- 【赵渝强老师】Weblogic域和域的组成
- 前端生僻字显示
- redis密码操作
- SpringBoot 整合 gradle 集成ActiveMQ
- 利用python自动写docx报告
- Maven构建项目速度太慢的解决办法
- 基于kubernetes Api完成更新镜像版本
- 代码覆盖率是什么?如何查看?