使用UDP完成网络通信

语言聊天有可以接受丢包但是不能接受乱序的特性,所以可以采用UDP来

传输数据提高效率。

因为UDP本身不可靠传输的特性,为了保证玩家可靠的接入服务器和一些

操作的正确执行,还是需要一些额外的代码保证UDP的可靠性传输。

一个简单的方案是在发送端发送一个包之后,等待接收端发送的recvack,

如果没有接收到recvack则重复发送直到超时。发送端接到recvack则发送

confrimack。接收端若没有收到confrimack重复发送知道超时。

为了区分可靠和非可靠性传输,为以枚举的形式封包提供了不同的包类型

需要提供不同的:

enum sendtype{

    safe_send,

    unsafe_send,

并且提供不同的发送接口:

void unsafe_send(char* buf,int len,const sockaddr* addr, int addrlen){

    int datalen += sizeofsenddatahead;

    senddata * data = (senddata*)malloc(datalen);

    data->type = unsafe_send;

    data->len = len;

    memcpy(data->data, buf, len);

    sendto(fd, data, datalan, 0, addr, addrlen);

}

void safe_send(char* buf,int len,const sockaddr* addr,int addrlen){

    int datalen += sizeofsenddatahead;

    senddata * data = (senddata*)malloc(datalen);

    data->type = safe_send;

接收端在接收到数据后,如果是safe_send,则发送recvack:

void sendrecvack(sockaddr_in & addr, int addrlen){
  recvack cmd;
  cmd.isrecv = cmdrecvack;
  safe_send(&cmd, sizeofconfrimack, (sockaddr*)&addr, addrlen);

发送端在接收到recvack后,发送confrimack:

void sendconfrimack(sockaddr_in & addr, int addrlen){

    confrimack cmd;

    cmd.isrecv = cmdconfrimack;

    unsafe_send(&cmd, sizeofconfrimack, (sockaddr*)&addr, addrlen);

使用心跳控制重发包:

void safesendheadbeat(int time, void * data){

    if (!vsenddata.empty()){

        senddata * data = vsenddata.front();

        sendto(fd, data, data->len, 0, addr, addrlen);

    }

    addtime(25,  safesendheadbeat, data);

使用心跳控制recvack:

void recvackheadbeat(int time, void * data){

    if (recvack != 0){

        sendto(fd, recvack, recvack->len, 0, addr, addrlen);

    }

    addtime(25,  recvackheadbeat, recvack);

时间: 2024-11-06 03:36:00

使用UDP完成网络通信的相关文章

Laxcus大数据管理系统2.0(8)- 第六章 网络通信

第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的网络资源,获得最大化的使用效率,我们根据大数据网络环境的特点,设计了一套专属网络通信协议,以及在此协议基础上实现的多套网络通信方案,它们共同组成了Laxcus集群的网络通信基础.本章将以TCP/IP协议为起点,介绍与网络通信有关的各个组成部分. 6.1 FIXP协议 Laxcus采用FIXP协议通信

Java入门系列-25-NIO(实现非阻塞网络通信)

还记得之前介绍NIO时对比传统IO的一大特点吗?就是NIO是非阻塞式的,这篇文章带大家来看一下非阻塞的网络操作. 补充:以数组的形式使用缓冲区 package testnio; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class TestBufferArray { pub

2017 年 PHP 程序员未来路在何方

PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推动者非常热衷于唱衰 PHP , PHP 语言的未来在哪里?PHP 程序员当如何应对未来的变革? 作为老牌的 Web 后端编程语言,PHP 在全球市场占有率非常高,仅次于 Java ,从各个招聘网站的数据上来看PHP 开发的职位非常多,薪资水平也非常不错.实际在中小企业.互联网创业公司PHP的市场地位

关于大小端问题和字节序问题的一些总结

1.大小端是不同的对于数据在内存地址中的存放方式,不同的处理器(平台)的数据存储方式是不同.的如果 实现跨平台通信则大小端是不能忽视的问题. 大端模式:数据的高位存储在内存的低字节.ARM/PowerPC等处理器采用大端模式 小端模式:数据的地位存储在内存的低字节.Intel架构处理器采用小端模式. 如一个数据:0x12345678;对应内纯地址是0x00~0x03. 大端模式: 小端模式: 地址:0x00 0x01 0x02 0x03 地址:0x00 0x01 0x02 0x03 数据:0x1

2017 年 PHP 程序员未来路在何方?

本文转载自http://blog.jobbole.com/110590/,如有侵权,请联系发布者及时删除! PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推动者非常热衷于唱衰 PHP , PHP 语言的未来在哪里?PHP 程序员当如何应对未来的变革? 作为老牌的Web后端编程语言,PHP 在全球市场占有率非常高,仅次于 Java ,从各个招聘网站

2017年PHP程序员未来路在何方?(转载)

PHP 从诞生到现在已经有 20 多年历史,从 Web 时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推动者非常热衷于唱衰 PHP , PHP 语言的未来在哪里?PHP 程序员当如何应对未来的变革? 作为老牌的 Web 后端编程语言,PHP 在全球市场占有率非常高,仅次于 Java ,从各个招聘网站的数据上来看 PHP 开发的职位非常多,薪资水平也非常不错.实际在中小企业.互联网创业公司 PH

9.2 Socket编程

远程管理软件和黑客软件大多依赖于Socket来实现特定功能,前几年流行的端口反弹更是把这项技术发挥到了极致. 如前所述,UDP和TCP是网络体系结构的传输层运行的两大重要协议,其中,TCP适用于对效率要求相对低而准确性要求相对高的场合,如文本传输.电子邮件等:而UDP适用于对效率要求相对高,对准确性要求相对低的场合,如视频在线点播.网络语音通话等.在Python中,主要使用socket模块来支持TCP和UDP编程. 9.2.1 UDP编程 在很多年以前普通家庭还没有手机.电话.传呼机的时候,主要

PHP程序员要掌握的技能

1. Composer 第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单.程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 composer update 安装依赖的包.解决了过去加载外部库的各种难题.Composer 也有国内镜像,速度非常快.现在绝大部分 PHP 开源的项目都提供了 Composer 的支持,建议大家在项目中使用 Composer 来解决 PHP 代码包管理的问题,不要再使用下载源码.手工 inclu

2019年PHP程序员未来路在何方

PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推动者非常热衷于唱衰 PHP , PHP 语言的未来在哪里?PHP 程序员当如何应对未来的变革? 作为老牌的Web后端编程语言,PHP 在全球市场占有率非常高,仅次于 Java ,从各个招聘网站的数据上来看PHP 开发的职位非常多,薪资水平也非常不错.实际在中小企业.互联网创业公司PHP的市场地位是高