对书籍跨平台开发_RTC程序设计:实时音视频权威指南 进行学习和习题讲解
跨平台开发:
我们希望使用一份C++代码,就能适应不同环境下的基本编译环境。
跨平台编译
如何自动识别当前代码是在哪个乎台编译的呢?
我们知道,每个平台的编译器都有一些独一无二的预定义宏(Predefined Marcos)。借助这些预定义宏,并假设我们在各个平台都使用官方推荐的开发环境,就可以识别当前的平台
例如,微软的MSVC编译器会定义_MSCVER宏;Android的Clang编译器会定义ANDROID宏。
DConfig.h
我们可以在各个平台的差异文件中,配置各个编译器的特有属性及平台特有属性。
DConfig_Win.h
DType.h
#pragma once
#include "DConfig.h"
typedef unsigned char DBtype;
typedef char DChar;
typedef char* DStr;
typedef const char* DCStr;
#if defined(BUILD_FOR_WINDOWS)
typedef wchar_t DWChar;
typedef wchar_t* DWStr;
typedef const wchar_t* DWCStr;
#else
typedef unsigned short DWChar;
typedef unsigned short* DWStr;
typedef const unsigned short* DWCStr;
#endif
typedef unsigned int DUChar;
typedef char DInt8;
typedef unsigned char DUInt8;
typedef short DInt16;
typedef int DInt32;
typedef unsigned int DUInt32;
typedef long long DInt64;
typedef unsigned long long DUInt64;
typedef DUInt64 DPtrDiff;
typedef float DFloat;
typedef double DDouble;
typedef long double DLDouble;
typedef bool DBool;
typedef void DVoid;
typedef void* DVoidPtr;
#if defined(TARET_64BIT)
typedef DUInt64 DSizeT;
typedef DUInt64 DHandle;
typedef DUInt64 DULong;
#else
typedef DUInt32 DSizeT;
typedef DUInt32 DHandle;
typedef DUInt32 DULong;
#endif
作为本书的第一个代码示例,我们将实现一个跨平台的Hello程序,它会在不同的平台上显示不同的Hello提示。我们设计一个跨平台隔离的C++类DXP[7],并为其封装两个static方法。
DXP.h
DXP.cpp
(根据自己的理解进行回答,不一定准确)
1.[5分钟](通信概念)什么是通信?人们为什么要通信?古人为了通信都使用了哪些方法?
1.什么是通信?通信是人与人或者人与自然通过某种媒介进行信息的交换。
2.人们为什么要通信?人与人需要进行通信来进行双方都不知道的知识的交换或者不完整知识的补充,来进行更好的生产或者作业。如工业界的git。
3.我了解古人通信基本使用的手段有,狼烟:古人通过木炭产生的烟升到空中,然后让距离很远的人进行一个信息的查看。或者是飞鸽传书:将写好的信件绑到鸽子的腿上进行信息的传递。
补充一个点:通信系统的模型一般遵循下面这个步骤:
信源-------→编码器-------→信道(+噪声)-------→译码器-------→信宿
信息 信号 信号+噪声 信息
2.[10分钟](信鸽速率)古代人通过信鸽传递消息,调查一下其传输速率。
信鸽传递消息的速度大约为每小时50到70公里,具体速度受天气、距离和地形等因素影响。在理想条件下,信鸽数百公里的旅程可能仅需数小时即可完成
3.[10分钟](首份电报内容)上网查一下第一份电报的内容是什么。
人类史上第一封电报诞生于1844年,是由美国科学家塞约尔·莫尔斯应用自制的电磁式电报机,通过65公里长的电报线路而拍发的。
4.[2小时](计算机发明史)计算机是如何发明的?有哪些关键事件?
1936年5月 图灵描述了图灵机,从此数学符号和实体世界第一次建立了联系。
1948年10月 香农发表 通信数学理论 标示着现代信息论的开端。
1945年第一台通用计算机ENIAC
1951年10月 冯诺依曼 担任IBM公司的顾问
1952年7月 IBM702被用于商业计算领域
此后20年,大型计算机不断频出,到了20世纪50年代末 IBM已经可以生产上千台
这期间,IBM 360的创始人布鲁克斯(FrederickP.Brooks,美国,1931-2022)撰写了著名的《人月神话》。
1969年,Intel的年轻工程师霍夫(MarcianHoff,美国,1937-)受日本公司委托设计一款台式计算机。他大胆地采用了可编程通用计算机的思想,将电路精简为CPU、RAM、ROM、寄存器(Register)电路片这4个部件。
另一位工程师费金(Federico Fagin,意大利,1941一)对这一电路进行了设计,在4.2mmx3.2mm的硅片上集成了2250个晶体管,用单个芯片实现了中央处理器的功能,这就是4位微处理器--Intel4004。
1972年,8位处理器--Intel8008诞生,在13.8mm的芯片上可以执行45种指令。
互联网
美国ARPA5资助的各单位的研究生,这就是最早的互联网的雏形--ARPANET。
1969年4月7日 斯蒂芬·克罗克(teveGrocker,美国,1944-)写下了第一份RFC(Request forComments),这是用来制定互联网协议的一种方式:发布者提出协议请求,请大家评论并给予建议。
在微型计算机诞生后,越来越多的人开始使用这个跨时代的工具。由于CPU只能执行二进制指令,这增加了人们使用它的难度。
1972年,贝尔实验室的丹尼斯·里奇(Dennis M,Ritchie,1941-2011)和肯·托马森(Kenneth Lane Thompson,1943-)设计发明了C语言。
1991年,在芬兰赫尔辛基大学就读的李纳斯·托瓦兹(LinusB.Torvalds,1969-),基于x86架构的CPU开发了一个可移植的操作系统--Linux。
Linux使用C语言与汇编语言进行开发,提供的API也是纯C语言接口,有着“一切皆文件的设计理念。
DOS AND Windows
1980年8月,蒂姆·帕特(TimPaterson,美国,1956-)基于Intel的16位芯片8086,开发了操作系统QD0S(Quickand Dirty 0perating System)
1981年7月,微软的CEO比尔·盖茨(BillGates)意识到未来个人电脑将有巨大的市场规模,他将QD0S收购,并将其改名为MS-D0S(Microsoft Disk 0perating System)。
1985年11月,微软发布了视窗操作系统windows1.0。
windows系统的诞生,在计算机发展史上具有里程碑式的意义。图形化的操作界面,让计算机的使用更加便利。大量的软件工具在其上蓬勃发展。其中一类应用便是实时通信(Instant Messaging,lM)
20世纪90年代,中国各城市中建起了大小规模的网吧。人们通过当时最著名的IM软件--qq结交网友,通过各种聊天室互相问候,通过局域网联机玩游戏并进行语音协作。
MAC OS
2007年1月9日,Apple公司的CE0史蒂夫·乔布斯(Steve Jobs,1955-2011)发布了第一款iPhone--iPhone 2G。这标志着智能手机时代的正式到来。
iPhone的操作系统i0S,其底层XNU由UNIX的某个分支发展而来。:每个i0SApp都是一个独立的沙盒进程,彼此隔离,同时,Apple公司也推出了自己的桌面操作系统--mac0s。与微软不同的是,Apple官方提供的API是基于0bjective-C(0C)和Swift的。Apple开发者的官网提供IDE--Xcode,以及在线开发文档。成为正式应用的开发者需要向Apple公司支付一定的费用。
Android 和 Chrome
2008年9月,Google紧随Apple其后,发布了Android1.0系统与Apple公司的选择不同,Android系统使用的是开源许可,各大手机制造厂商都可以基于Android系统的代码,定制自己的移动操作系统。国内如华为、小米、0PP0、vivo,大都采用Android的基线进行定制。Android的底层内核是Linux,其上有各种Java的Framework,供应用程序使用。Android应用开发使用Java和Kotlin语言。Google开发者的官网提供AndroidStudio和官方文档。
5.[2小时](wi-Fi发明人)wi-Fi中的跳频技术是谁发明的?有何用途?
Wi-Fi中的跳频技术是由好莱坞女星海蒂·拉玛(Hedy Lamarr)和作曲家乔治·安塞尔(George Antheil)共同发明的。他们在1942年获得了这项技术的专利。这项技术最初是为了军事通信设计的,目的是为了防止敌方拦截或干扰信号。跳频技术的基本原理是,通信信号在预定的多个频率之间快速、有序地切换,这样即使某个频率受到干扰,通信也不会中断,因为信号会在其他未受干扰的频率上继续传输。这种技术大大提高了通信的安全性和可靠性,因为它使得拦截或干扰整个通信过程变得非常困难。
6.[10分钟](桌面系统版本)查看自己的windows/macos桌面系统使用的是什么版本?
版本 Windows 11 家庭中文版
版本号 24H2
操作系统版本 26120.2213
体验 Windows 功能体验包 1000.26100.34.0
7.[10分钟](手机系统版本)查看自己的手机使用的是什么系统?什么版本?
硬件版本号MP_0.1
软件版本号PD2307...
基带版本 PSS.DE
内核版本6.1.84-Android14-11-maybe-dirty
8.[30分钟](RFC查询与阅读)使用web浏览器查阅第一份RFC的协议内容,并学习如何检索其他RFC文档
GitCode - 全球开发者的开源社区,开源代码托管平台这个网址是中文rfc协议内容
RFC Reader - An online reader for IETF RFCs 这个英文网站
9.[3人天](Linux命令)学习使用Linux命令,并编写一个Shell脚本,用于打印系统的版本号、CPU、内存、硬盘等信息。
腾讯云服务器从购买到配置(Linux系统、小白教程)-腾讯云开发者社区-腾讯云
我们先去申请一个腾讯云服务器,配置如下:
然后安全组开放云主机常用登录和web服务端口,内网全放通
Linux 系统启动过程 | 菜鸟教程 这个网址学习linux和shell开发
如果我们需要宝塔linux面板查看linux的性能 和管理项目腾讯云服务器Linux可视化使用宝塔面板_linux云服务器可视化-CSDN博客
非可视化界面不是太友好,所以需要使用yum grouplist "可视化界面"进行安装
云服务器 搭建 CentOS 可视化界面-实践教程-文档中心-腾讯云
安装好了之后可以用腾讯云的VNC进行可视化的页面进行查看
10.[5人天](i0s编程)编写一个i0S App,尽可能多地显示当前系统的信息与用户设
置。
暂未完成
11.[5人天](Android编程)编写一个Android App,尽可能多地显示当前系统的信息与用户设置。
暂未完成
12.[2人天](类型单元测试)为DTypes.h文件编写一个UT(Unit Test)文件,测试各个平台下基本类型的长度是否符合预期。
编写适用于 C/C++ 的单元测试 - Visual Studio (Windows) | Microsoft Learn
点击测试googletest
在test.cpp里面写测试用例
如果我们把指针的匹配字节数改成7 会报错