如果我们要指定一个计算器,那么客户端就应该将两个数据和一个运算符号发给服务器,服务器进行解析后计算后将最终数据发给客户端。
例如:我们要指定一个加法器,那么客户端就应该给服务端发两个数据和一个“+”符号,那么对于服务器,他肯定有自己的一个协议,这个协议就是约定方案,约定了客户端在请求服务端的时候,应该将数据以什么方式发送,数据最终以什么方式返回来,只有这样的操作,客户端才能得到客户们想要的结果。
例如:我们要制定一个加法器,那么我们应该又以下一些协议
约定一:
约定二:
上面只是写了约定的一部分,因为对于我们实现一个加法器也不需要多少约定。
注意:不管是约定一还是约定二,它们的终极目标就是制造一个统一的事件(针对一件事情),也就是为了让客户发过来的东西,服务器能知道对发来的数据进行如何正确的处理(也就是服务器可以正确解析)。
对于加法器的实现,我们使用的结构体来发送数据,因为对于结构体,它可以将数据和运算符分开,可以让我们非常容易的就解析到数据和运算符。
封装一个加法服务器的套接字类,如下:
服务器实现如下:
客户端的实现如下:
可以看见,在进行信息的传送时,用的是结构体,因为结构体可以直接将我们要传递的数据和符号进行分开,可以使服务器更好的去解析,这也就是序列化和反序列化的作用。
上面我们提到了序列化和反序列化,那么它俩到底是什么意思呢?
1.序列化:将对象转换成为字节序列的过程。
2.反序列化:将字节序列恢复成对象的过程。
说白了,序列化和反序列化也就像是一个规定一样,可以让服务器接收到数据,并且对这些数据进行正确的解析,但是它们也有一些重要的作用:
注意:对于序列化形式,他有一个考量
上述我们使用的是结构体,因为根据结构体的结构特性,成员变量的赋值就能实现数据在内存中的组织。但是他是有缺点的,因为对于不同的平台,位段的使用可能不一致,字节对齐也可能不一致。
3.序列化的优点: