udp通信的消息处理方案
0、引言
大家都知道当使用udp通信时,最大的一个问题是会出现丢包的情况,那么如何可以既使用udp来传输,又同时能有效防止丢包呢?
本文提供一种简单有效的方法,可以显著避免udp丢包的问题。此外,如果要达到类似tcp通信的效果,则需要相应添加其他规则。基于udp来实现tcp的方法有google提供的开源框架——libjingle,大家感兴趣的话,可以下载源码来学习参考。
1、建立发送消息结构体和接收消息结构体
struct SendMsg
{
time_t expire_time;
unsigned int try_count;
int data_len;
char* data;
SendMsg():expire_time(), try_count(), data_len(), data(NULL){}
} struct RecvMsg
{
time_t expire_time;
int data_len;
char* data;
RecvMsg():expire_time(), data_len(), data(NULL){}
}
2、唯一标识消息的来源或消息发送的去处,暂时使用对方的ip和port
struct AddrIndex
{
unsigned short port;
unsigned int ip;
unsigned in tran_id; //数据包标识,由对方生成数据包时进行累加
bool isSend; //是发送的数据还是接收的数据
//实现<运算符操作,因若要在map中使用AddrIndex作为索引项,需要将之实现
bool operator<(const AddrIndex& addrIndex) const
{
if (this->ip < addrIndex.ip)
{
return true;
}
else if (this->ip < addrIndex.ip)
{
return false;
}
if (this->port < addrIndex.port)
{
return true;
}
else if (this->port < addrIndex.port)
{
return false;
}
if (this->tran_id < addrIndex.tran_id)
{
return true;
}
else
{
return false;
}
}
}
3、创建udp数据包核查的数据结构
class UdpCheck
{
private:
map<AddrIndex, SendMsg> send_check_msg;
map<AddrIndex, RecvMsg> recv_check_msg;
int sock_fd;
unsigned int timeout_unit;
unsigned int max_try_count; public:
//公有接口主要如下所示:
//1.当接收到数据包后,查看接收历史是否有一致的数据包,若有则更新历史的数据包 //2.当发送数据包后,查看发送历史是否有一致的数据包,若有则更新历史的数据包,否则插入历史中 //3.当接收数据包后,查看接收历史是否有一致的数据包,若有则更新历史的数据包,否则插入历史中 //4.当接收到发送数据的应答后,就从发送历史中删除相应数据包 //5.当接收请求,但处理失败时,就从接收历史中删除相应数据包 //6. 遍历发送历史中的数据包,判断是否重发,是否删除
//当重试次数没有超过最大值,且记录维持时间小于time_unit*max_try_count时,则不删除,且重发udp数据包 //7. 遍历接收历史,判断是否过期删除 //8. 外部还需要提供一个定时器来定时查看接收和发送历史
}
udp通信的消息处理方案的更多相关文章
- 【RL-TCPnet网络教程】第17章 RL-TCPnet之UDP通信
第17章 RL-TCPnet之UDP通信 本章节为大家讲解RL-TCPnet的UDP通信实现,学习本章节前,务必要优先学习第16章UDP用户数据报协议基础知识.有了这些基础知识之后,再搞本章 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- HP-SOCKET TCP/UDP通信框架库解析
项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- static 不被实例调用
static - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/ ...
- Java for LeetCode 100 Same Tree
Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...
- 提高iOS开发效率的第三方框架等--不断更新中。。。
1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 ...
- 3D立方体旋转动画
在线演示 本地下载
- Spring Boot2.0之注解方式启动Springmvc
回顾下springmvc原理图: DispatcherServlet是Spring MVC的核心,每当应用接受一个HTTP请求,由DispatcherServlet负责将请求分发给应用的其他组件. 在 ...
- Cocos2d-x中锚点的介绍
什么是锚点? 只需要记住一句话就可以,锚点就是你指定的那个坐标究竟是图像的哪个点,也就是你setPosition的坐标 eg: 新建工程:在HelloWorld中写上如下代码: CCSprite * ...
- BZOJ 1657 [Usaco2006 Mar]Mooo 奶牛的歌声:单调栈【高度序列】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1657 题意: Farmer John的N(1<=N<=50,000)头奶牛整齐 ...
- html5--1.16 内联框架
html5--1.16 内联框架 学习要点: 1.iframe内联框架2.综合实例1 1.iframe内联框架 1.iframe元素用来在文档中添加一个内联框架. 2.iframe为body元素的子元 ...
- 分享知识-快乐自己:SpringMvc后台Date对象数据 到 前台页面的显示转换
常常为日期格式的转换而烦恼吗?那么就试试看看楼主的方式吧!让你摆脱烦恼,从而快乐撸码. 如果你只用作于一个日期的显示采用方式如下: 导入:相应的类库 <%@ taglib uri="h ...
- 发现eclipse红叉,查看markers发现Target runtime Apache Tomcat v8.0 is not defined
导入以前的项目(Markers中注意查看,就在console选项卡旁边),报以下错误,但不影响操作: Faceted Project Problem Target runtime Apa ...