我是菜鸟,但是基于我的自娱自乐,还是着眼于程序端的实现来谈谈我的通信。
简单讲,通信的目的就是将程序对外的数据交流准确无误地传递到另一个程序那一端。画个图来介绍数据处理的方式
程序内部数据处理 ···其他的数据处理····
IO流进行数据传递 最基础的byte流
物理层电脉冲实现 *****物理层的01串传递*******
既然是通信,就必然是两个程序之间进行数据的传递,这就要求通信的双方都实现了程序在同时运行。但是,在现实的通信中,我们都知道其实QQ的实现并不是两个客户程序之间进行直接的数据传递的,因为在通信双方不同时在线的时候我们还是可以实现信息的交流。要在两个不同时运行的程序之间实现通信其实也不是很复杂,这就牵扯到一个叫服务器的东西。这个东西存在的目的就是随时接受任何一个客户机发过来的通信信息,并将这个信息传递给目标通信程序。这也就是所谓的服务器转发机制。
话个图来说
客户端1———发送———>服务器
服务器搜寻目标客户端:客户端2.
服务器———发送———>客户端2
我所演示的是简单的数据通信。现实中还存在客户端2不在线的情况,离线推送的情况等等,在这里,各种情况都会牵扯到服务器的处理方法和数据的临时寄存等等,我就不赘叙了。
在程序内部的数据处理上,目标程序的做法和发送程序几乎是一样的,就是将发送程序的做法完全反过来来一遍。这一块我是着眼于byte来进行理解,就是将byte看作基本的数据传递单位。至于在物理层,是怎么以01 码的形式来传递的我们暂时就不去深究了,想要搞明白通信的全部基础知识的话那是一门绝对的课程来,对于我们来说,也没有不要现在立马搞明白路由的算法问题,以及包的收发机制。
好既然搞明白通信数据传输的问题,那我们就完成的通信的最基本的东西了。通信这东西必然是与简单到复杂的过程,比如在电磁波刚刚发明的时候那些NB的所谓先哲们估计也就是发了一个电磁波脉冲,然后另一端收到了这个脉冲,然后他们就叫嚷着说我发明了一个可以改变世界沟通方式的载体,然后他就被载入史册了。现在看来很简单,但是我估计第一次发明电磁波的人肯定还不知道要用调频、调幅、调相等方法来进行数据传递,所以信息的传递量是相当之少的。就像内容和清晰度是反函数一样,两者在其初期是会选择内容的。以最少的硬件成本创造最大的通信价值。但是,随着时间的后移,当硬件已经不是问题的时候,对数据传递的质量的要求就越来越高,所以出现了所谓的数字通信,这玩意而不是新东西,使用01电脉冲来传递信息让我想到了抗战片里面八路军那台嘀嘀嘀个不停的发报机,我没有深究那个时代的发报机是不是以01脉冲来进行数据传递,但是断断续续的滴滴声倒是相当的形象。
所以现在的网络通信内容与清晰度的函数因为硬件巨大升级而失效了,在信息传递容量不受限的前提之下,信息的质量被看得越来越重。但总得概括来说就是:基本传输的单元是byte,byte是8个01脉冲在电路中传输。至于其他的什么,对于我们菜鸟来说,太阳会升起来的,慢慢的都会知道的。
所以,在我的通信程序里面,客户端发送数据就截止到byte为止,服务器进行数据的收发的时候也是以byte为基本的单位来进行监听转发。
所以到这边,我已经可以进行在客户端与服务器之间进行byte的发送与接收。但是,问题又来了,中文发送的时候是乱码!!丫的,到这边,我不得不谈上次做的一个哈夫曼压缩的软件:对字符出现的频数,以此为哈夫曼建树的权值进行的。那个软件是按照ASCII编码给其对应的字符相应的哈夫曼编码来进行压缩的。程序写到一半我就非常担心了,因为中文是两个byte进行编码的,这样就来问题了:是不是我的压缩软件写到最后在压缩相应的中文编辑文件的时候会出错,没有办法压缩,或者解压出来是乱码?但是,当时又想不出比较好的方法来解决这样
的问题,索性先写完再说,看看实际运行的时候问题出现在什么地方,有什么方法可以解决。但是,运行的时候非常神奇,它既然很顺利地压缩了,也很顺利地解压了。看来中文的问题没有上升为敌我斗争的主要矛盾,我长舒一口气,估计在系统内部是不是有个什么机制自动将两个byte组装成了一个汉字编码然后显示出来了。这下我还沾沾自喜,觉得,哎呀,劳资挺聪明的哈,既然就猜到了这一步,这是典型的猪八戒吃人参果,反正囫囵吞了。
代码就不给大家看了,一句话讲明白就是我是原样还原的。详细点说:在原文件中,数据的存储是以01串的基本形式存在的,我依旧以其原先的01串的基本顺序在文件中,至于文件怎么去处理这个01串我就没有去考虑。
但是在处理通信问题的时候,我发现这样的处理方法不靠谱了,最直接的原因是我的客户端与服务器在数据发送与转发的最低的数量单位都是byte,这就是说,我是一个byte一个byte地来读的,但是这样以来,我按照原先的思路也就是一个byte一个byte地来读取的。所以在英文传递的时候还觉得没怎么样,但是一到中文就被枪毙了,因为中文是两个byte来进行翻译的。所以我还是按照原先的思路以数组方式来对数据进行封装,再以创建字符串的方式来显示。详细就不讲了,都可以百度到。
有很多人说,那肯定是要讲讲协议的。关于什么叫协议,我觉得有必要再打个比喻来说一下。我的理解就是:数据不等同于信息,数据是没有特殊含义的,但是信息却是有价值的,可以被理解的。我们先前完成的通信可以简单传递一个电脉冲,但是这并不等于电脉冲就是信息。有一天有人莫名其妙地给你发来短信,你打开一看,里面只有“1”。我估计你是会崩溃的,丫的纯粹在逗你玩~~对不?当代生活几乎就是建立在通信的基础上的,所以,这时候协议就显得很有必要了,它告诉数据的接受方这个数据的意思是什么。打个比方来说:大家都知道数据加密是怎么回事,其实通信这个时候和加密解密有点像,而协议就是告诉你,这段密文是什么意思,将普通的数据变成有用的信息。
那通信就是通过服务器借助协议的理解将信息从一端传递到另一端,我理解的通信就讲完了。
分享到:
相关推荐
VS2015社区版可以运行,因为在网上大多都是MFC的,这里给个WIN32形式的,其实从别人那里抄的,原文 在本站搜“c++串口通信实例”作者是“追梦会发光”,只是在他那个代码上添加了一些说明而已。这里以资源形式发出来...
这项技术违背了量子力学中的量子不可克隆原理和海森堡不确定原理,因此它在经典通信中只不过是一种科幻而已。然而,量子通信中引入了量子纠缠这一特殊概念,将原物未知量子态信息分成量子信息和经典信息两部分,使得...
数据包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数,或者采用中断发送的方式。 3. 上位机中的串口通信 上位机中的串口...
区别仅仅在于 WCDMA 和 CDMA 1X EVDO 的基站容量相对 GSM 基站较大,出现这一问题的概率较小而已。 三种通信方式(GPRS、WCDMA、CDMA 1X EVDO)在具体部署中都采用蜂窝小区方式组网,每个基站的布置都有严格的位置...
参数设置程序与读取子程序类似,只是改变命令而已。 Access97 数据库的使用 我们可以使用Access97 数据库来存储数据。在本例中,我们创建了三个表单,包括参数表、记录表、报警记录表。通过SaveData子程序,我们...
这个框架协议自己定义(即:底层已有字符串传输或Object传输,自己可以定义字符串会对象进行解析来制定自己的...语音、图片等其实也是上传文件服务器再连个即时通信字符串通信而已; 注意:SSH-lib里有注意事项说明
lpc2103串口通信的部分简单代码,只是部分接收和发送而已,没有太多
调制信号是待传输的信息,载波通常是正弦波,而已调信号则是调制后的结果。 数字调制与模拟调制的主要区别在于调制信号的性质,数字调制使用的是二进制或其他多进制的离散信号,而非连续的模拟信号。常见的数字调制...
方便自己而已
在IP协议的不可靠数据交付过程中,由于各种网络问题,如数据包丢失、重复、延迟或顺序混乱,IP协议本身无法直接检测这些问题,也无法通知通信的两端。此时,ICMP便发挥了关键作用。 ICMP协议可以被比喻为IP协议的...
"单片机通信协议处理" 单片机通讯协议办理是指在单片机系统中,如何通过上位机软件来操作和调试单片机,实现通讯的过程。在这个过程中,我们需要定义一个通用的数据通讯协议,包含上位机端和下位机端等几个方面。 ...
HAL库Can通信收发实验,500K波特率,亲测可用。 虽然CAN协议本身具有一定的复杂度,但实际上使用CAN进行基本的数据收发是非常简单的,因为大部分工作都是硬件帮我们完成的,我们要做的仅仅是使用库函数往FIFO(CAN...
但其实这些问题又不难,只是需要细心而已。下面就随着蓝牙模块厂家云里物里一起来看下常见问题。 1,为什么你们的模块连上电脑没有反应? 答:请客户检查好自己的转接头是否正确接入模块,引脚是否正确,转接头...
这个名为“27个FPGA实例源代码-VHDL(平均0.5分而已)”的资源包,包含了27个精心挑选的VHDL代码实例,对于学习和理解FPGA设计来说非常有价值。 这些实例涵盖了FPGA设计的基础到进阶概念,包括但不限于以下知识点...
- **WebDriver**:Selenium的核心组件之一,它可以与多种浏览器(如Chrome、Firefox)进行通信,实现浏览器自动化。 - **元素定位**:通过CSS选择器、XPath或其他方法找到网页上的特定元素,然后进行操作。 - **事件...
多机通信,无非就是添加了一个设备地址判断而已,难度也不大。我们找了一个 Modbus 调试精灵,通过设置设备地址,读写寄存器的地址以及数值数量等参数,可以直接替代串口调试助手,比较方便的下发多个字节的数据,如...
自动化打卡程序,是一种技术...总之,自动化打卡程序的实现涉及多种技术,从网络通信到用户界面模拟,再到任务调度和数据处理。然而,应当明确,这样的工具只适用于合法且非侵入性的场景,不得用于欺诈或其他非法目的。
这种方法的优点是占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这种时延相当的小。对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用 RAM 资源,而且对比...
在实际应用中,国内一些Android APP虽然使用了HTTPS的通信方式,但只是简单地调用而已,并没有对证书的有效性进行校验,使整个对话被攻击者完全控制,可以随意修改或插入新的内容。这种漏洞使HTTPS形同虚设,轻易...