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

- 互相访问的效果如下:

- 参考代码如下:
客户端.h文件:
#ifndef UDPSOCEKT_H
#define UDPSOCEKT_H #include <QWidget>
#include <QUdpSocket>
#include <QHostAddress>
#include <QString> namespace Ui {
class udpSocekt;
} class udpSocekt : public QWidget
{
Q_OBJECT public:
explicit udpSocekt(QWidget *parent = );
~udpSocekt(); private slots:
void on_sendbutton_clicked(); void on_closebutton_clicked(); void dealdata();
private:
Ui::udpSocekt *ui;
QUdpSocket *Udpsocket;
}; #endif // UDPSOCEKT_H
客户端.CPP文件:
#include "udpsocekt.h"
#include "ui_udpsocekt.h" udpSocekt::udpSocekt(QWidget *parent) :
QWidget(parent),
ui(new Ui::udpSocekt)
{
ui->setupUi(this);
setWindowTitle("客户端1:6666");
Udpsocket = new QUdpSocket(this);
//绑定端口(声明自己的端口)以便别人访问
Udpsocket->bind();
connect(Udpsocket,&QUdpSocket::readyRead,this,&udpSocekt::dealdata);
} udpSocekt::~udpSocekt()
{
delete ui;
}
void udpSocekt::dealdata()
{
char buf[] = {};//读取对方的内容长度
QHostAddress Addr;//对方地址
quint16 port;//对方端口
qint64 str = Udpsocket->readDatagram(buf,sizeof(buf),&Addr,&port);
if(str>)
{
//字符串组包
QString showData = QString("[%1:%2] %3").arg(Addr.toString()).arg(port).arg(buf);
ui->display->append(showData);
}
}
void udpSocekt::on_sendbutton_clicked()
{
//从输入框获取端口和访问的IP
QString ip = ui->ip->text();
quint16 port = ui->port->text().toInt();
QString text = ui->send->text(); //执行发送
Udpsocket->writeDatagram(text.toUtf8(),QHostAddress(ip),port); } void udpSocekt::on_closebutton_clicked()
{
Udpsocket->disconnectFromHost();
Udpsocket->close();
}
Socket之UDP的更多相关文章
- C#的Socket实现UDP协议通信
今天稍花化了一点时间,利用C#的Socket验证了UDP的通信,为接下来特地利用UDP做个分布式的通信仿真系统打下基础.众所周知,UDP 就是用户数据报协议,在互联网参考模型的第四层——传输层.与TC ...
- Socket之UDP发送文件
内容导航 一. Socket之UDP异步传输文件 二.Socket之UDP异步传输文件 三.Socket之UDP异步传输文件-多文件传输和文件MD5校验 四.Socket之UDP异步传输文件-用 ...
- 六、Socket之UDP异步传输文件-实现稳定的文件传输
上一篇文章五.Socket之UDP异步传输文件-实现传输中取消传送中,还遗留了一个传输文件最大的问题,就是传输过程中丢包,这样在文件传输过程中就会卡住了,这篇文章就来解决文件传输中的丢包问题,实现稳定 ...
- 二、Socket之UDP异步传输文件
上一篇文章一.Socket之UDP异步传输文件中,实现了文件的基本传输,但是传输过程中的信息是看不到的,这一篇是对上一篇进行了一些改进,并且可以了解传输的信息(加入了Log),还加入了接收或者拒绝接收 ...
- 三、Socket之UDP异步传输文件-多文件传输和文件MD5校验
本文接着上一篇文章二.Socket之UDP异步传输文件,在上一篇文章的基础上实现多文件的传输和文件传输完成后进行完整性校验. 要实现多文件的传输,必须要对文(2)中发送文件的数据格式进行改进,必须加入 ...
- 四、Socket之UDP异步传输文件-用控件显示文件传输进度
上一篇文章三.Socket之UDP异步传输文件中,实现了多文件的传输和MD5校验,还显示了文件传输过程中的信息,在这一篇文章中,将介绍怎样实现传输文件的进度显示和实现选择保存文件路径. 首先,来实现一 ...
- 五、Socket之UDP异步传输文件-实现传输中取消传送
上一篇文章四.Socket之UDP异步传输文件中,只实现了传输开始前拒绝接收文件,没有实现文件传输进行的时候取消传送,这篇文章中我们就来介绍怎样实现这个功能. 在传输过程中取消文件的传送,有很多地方要 ...
- 【Socket编程】通过Socket实现UDP编程
通过Socket实现UDP编程 UDP通信: 1.UDP协议(用户数据报协议)是无连接.不可靠.无序的. 2.UDP协议以数据报作为数据传输的载体. 3.使用UDP进行数据传输时,首先需要将要传输的数 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- python网络-Socket之udp编程(24)
一.udp简介 udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地. udp在 ...
随机推荐
- opencv简单实用(cv2)
一.介绍 安装:pip install opencv-python OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS ...
- Keepalived 工作原理和配置说明
keepalived是什么: 简单来说 Keepalived 的功能功能1.使用VRRP协议 来控制一组高可用(HA) 主备系统,一台master工作,一台slave热备:master失效后slave ...
- Ubuntu14.04安装及配置mysql5.7.19
通过uname -a或lsb_release -a 查看版本信息 ,确定linux的发行版是debian还是ubuntu.root@suepc:/usr/local# uname -aLinux su ...
- [MacOS]MacOS字体文件位置
$ cd /System/Library/Fonts $ ls Apple Braille Outline 6 Dot.ttf Noteworthy.ttc SFCompactText-Regular ...
- Error serializing object:序列化对象时出错
序列化对象时出错 :Error serializing object. Error serializing object. Cause: java.io.NotSerializableExceptio ...
- 前端之gojs插件的基本使用
gojs是一个前端插件,可以通过代码动态的生成流程图,各自展示图 参考网址:https://gojs.net/latest/index.html 如果你想使用,需要先下载对应的文件 我们能用的到的其实 ...
- 刷题94. Binary Tree Inorder Traversal
一.题目说明 题目94. Binary Tree Inorder Traversal,给一个二叉树,返回中序遍历序列.题目难度是Medium! 二.我的解答 用递归遍历,学过数据结构的应该都可以实现. ...
- 手把手教你搭建 ELK 实时日志分析平台
本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...
- .Net框架的模块代码生成器--其二(dotnet tool)
以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...
- Programming on C 学习笔记
目录 include不同的声明方式有什么不同? if defined 与 #ifdef 有什么区别? undef 是怎么工作的? 如何利用 typedef 来定义数组? 枚举中,如果有个元素被赋予值, ...