通信__协议的那点事!!

zz/2024/6/13 21:31:03

我们的“协议”:

 

到目前为止,我们已经简单了解了通信的基本模型,Server—Client模型,这里以简单聊天工具为例:1、服务端启动——2、客户端启动,并试图与服务端建立连接——3、服务端根据条件(通常是根据客户端发送过来的某种特殊消息,分析其中的账号,密码)发送响应给发送请求的客户——4、若同意,客户端获得某种使用功能的权利——5、服务端发送包含特定接收对象的聊天消息给服务端——6、服务端转发聊天消息,并goto步骤5

 

由上面的简单例子,我们可以看到,通信的双方在通信时有特定的步骤。只有双方都按正确步骤来执行,通信才能有质量的实现。当有一方违反这种规则的时候,那就整个乱套了:你能不通过登陆,就直接用QQ发送消息给你的朋友么??

 

其实,上面提到的概念就是通信协议中的两大核心概念之一:流程。

 

流程,简单的说,也就是我们规定的通信双方发送信息的先后顺序。

 

流程是很重要的,因为通信的一方一般在某个特定阶段只能接受特定种类的消息。还是用简单聊天系统来举例,服务器在某个客户端登陆以前是这能接受“注册”或者“登陆”消息的,如果这个时候它接受到了其他种类的消息(如客户端流程不正确,发送了一条“聊天消息”),服务器实际上是分辨不出来,而把它当做错误消息来处理的,一般是断开连接,严重的可能会导致系统崩溃。

 

任何一个能正常运行的网络程序都是高度契合的。

 

 

在上文中,我多次提到了消息的“种类”,这就是通信协议中的另一个核心:消息的定义。

 

 

我们知道,通信中信息的发送与接收是通过IO流来实现的,而底层IO流传输的01串,那么,怎样通过01串来表示要传输的数据呢??

 

很容易想到,是编码!!我们按照规则用特定的字符来表示特定的含义。当然,这个规则必须是事先定义好的,而且必须是通信双方都知道,且严格遵守的。

 

简单的规则定义方式有2种:一种是字节型,一种是xml型。

 

字节型: 如我们事先规定发送的第一个byte是表示消息的类型,1表示群聊消息,第2到第四个byte(即一个int)表示聊天消息的大小,后面N个字节表示聊天内容。那么当我们接收到 1 6 1 3 47 2 89 20 的时候,我们就可以把他们翻译成相应的消息了,将后6个byte:1 3 47 2 89 20 转为相应的String就行了。

 

xml型: (Extensible Markup Language)即可扩展标记语言,这里我就不copy定义了,google一下就知道了。我只举个例子: <msg><type>GroupChat</type><content>.........</content></msg> 这就是我曾经定义过的一个群聊消息。当服务端接收到这个来自客户端 的字符串的时候,通过分析结构,就知道该怎么处理了。

 

 

值得注意的是:消息格式的定义是因程序而异的,不同的程序有其独特的定义,而且这种定义是唯一的,是必须在事先定义好的。

 

 

 

 

 

网络上的“协议”:

 

我们上网也是享受通信服务,其中的数据传输同样要受到某种协议的约定,这种协议的名字叫做:TCP/IP协议族。

 

今晚就不写了,累了,以后有时间再简单讨论(真的是“简单”的说,这玩意太复杂了,看书看的泪奔了,5555)

 

具体可以去参阅一本名叫《TCP/IP协议详解》的书


http://www.ngui.cc/zz/2727411.html

相关文章

《Google三大论文》_The Google File System

关于预期和实现&#xff1a; 在Google的面向大规模的数据密集型的分布式运用中&#xff0c;GFS都是关键和基础。同时&#xff0c;开源的hadoop File System 与GFS也是很相似的。 与传统的文件系统相比&#xff0c;GFS在设计上有以下几种特点&#xff1a; 一、组件失效被认为是常…

日记 or 小小说 :想进腾讯的师弟师妹们,别学我 (三)

建议您先看&#xff1a;日记 or 小小说 &#xff1a;想进腾讯的师弟师妹们&#xff0c;别学我 &#xff08;一&#xff09;&#xff08;二&#xff09; ~~~~~~~~~~~~~~~~~~~~~我是分割符号~~~~~~~~~ 每一个值得被历史铭记的时刻总是会出现一些不能用科学来解释的现象的&#xf…

日记 or 小小说 :想进腾讯的师弟师妹们,别学我 (四)

请原谅我用这样的标题将你们的注意力引来&#xff0c;其实这只是因为我想不到更好的标题了。 突然想起来文章可能会涉及到个人隐私&#xff08;虽然我一直宣称是小说&#xff0c;文中人物是虚构的&#xff0c;但骗自己有意思么&#xff1f;&#xff09;&#xff0c;再加上最近发…

突然发现的HDFS与GFS在实现上的一些不同

GFS&#xff1a;Google File System HDFS&#xff1a;Hadoop Distribute File System 首先&#xff0c;有一点要确认的是&#xff0c;作为GFS的一个最重要的实现&#xff0c;HDFS设计目标和GFS是高度一致的。在架构、块大小、元数据等的实现上&#xff0c;HDFS与GFS大致一致。但…

在SP公司打工,服务器端技术很重要

所以&#xff0c;既然要做点事情&#xff0c;先从Tomcat开始:) 新手&#xff0c;不知道怎么写blog&#xff0c;大家看了多包涵&#xff0c;自己努力ing

[FW:] Writing big files to ServletOutputStream

Problem when writing big files to ServletOutputStream 转自&#xff1a; http://www.theserverside.com/discussions/thread.tss?thread_id29261 Posted By: Anand Rajagopal on October 06, 2004 10:18 AM I am using the following code to write files to servlet outp…

创建动态菜单的JSP自定义标签(A Custom JSP Tag Library for Dynamic Menus)

转自&#xff1a; http://www.onjava.com/pub/a/onjava/2003/04/09/dynamic_taglib.html

对收藏夹中AspectJ和Spring结合使用例子(What the teacher said (using AspectJ with Spring part II). )的补充

config.xml简化为&#xff1a;<?xml version"1.0" encoding"UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id"…

疑似遭到攻击,各位老大帮忙看看,手机网址之间(www.mobi123.cn)

从凌晨开始&#xff0c;来自218.5.2.250的大量奇怪的访问&#xff0c;各位老大帮忙看看是怎么回事&#xff1f; 查了一下这个ip&#xff0c;是“福建省福州市 榕基软件开发有限公司”&#xff0c;不知道是不是这个 公司自己的服务器被人黑了。 218.5.2.250 - - [05/Sep/2006:…

得罪台湾同胞的内地搜索引擎

转自&#xff1a; http://yblog.org/archive/print.php?5862 爬虫一览表&#xff1a; 没办法啊&#xff0c;不加入搜索引擎么不好&#xff0c;加入么狂搜啊&#xff0c;google也是这样。昨天晚上它扫了我一晚~郁闷&#xff0c;流量啦&#xff0c;IIS连接数什么的。还好我的…