在前面的很多博文中分析了socket编程中的的函数recv和send的用法,知道了其缓冲区的大小是有限的,知道了同步和异步传输中两个函数分别的不同点,理解这些都是网络传输中数据稳定传输和高效率传输的保证。下面我再提出几个相关的问题:
(1)当我们编写比较复杂的数据传输的问题的时候可能需要传输大量的数据,使用一次send发送不完,使用一次recv接收不完,这个时候就需要使用多次send来发送数据,使用多次recv来接收数据。那么如何高效实现这个传输的过程呢?实际上我们需要设计一个私有的传输协议,也是一个简单的协议,只要接收双方约定好了就可以进行实施。后面慢慢道来。
(2)在传输数据的时候我们并不是总是在处理字符串,例如有的时候我们需要处理更加复杂的数据,例如结构体,类等等。这个时候我们又需要注意一个问题了,就是结构体/类在内存中的保存形式了。因为我们的编译环境会对结构体中的数据进行对齐处理,这个时候我们就需要保证接收双方的运行环境是一样的,假如不一样那么可能会出现意想不到的结果,有的时候真是百思不得其解。
接下来我们就来分析这两个问题:
(1)设计一个私有协议来对数据进行收发。因为数据过大,一次性传输完,那么就需要在传输数据的头部加上对应的数据,用来记录这一次要发送的数据,那么接收方就只要接收相应大小的数据即可了。我们可以采用传输