VC socket packet

来源:百度知道 编辑:UC知道 时间:2024/06/07 08:27:39
在用 wincosk 的时候发送 struct 数据结构.

但是在又的应用中,例如:

登录 , 获取名单, 和发送信息.

网络游戏的 各种数据发送.

是不是都只用一个 struct ? 那麽那个struct 不是得申明很多参数??

如果不是,是怎麽样解决的呢?

问题关键:: 获取名单, 登录游戏, 发送信息 之类的数据发送send,. 是不是得分结构来发送? 如果是怎麽做到recv来判断,接收??

这是一个通信协议的问题
一个比较简单的方案,效率和灵活性都有些问题,仅供参考:

一个固定的结构体,加一段变长的数据

struct xxx {
int magic_number;
int serial_number;
int command_type;
...
int content_length;
}

变长数据 content 的结构是这样的:
<key_len><key><value_len><value>...

key_len是一个int, key的长度由key_len指定
value_len是一个int, value的长度由value_len指定

content 直接在结构体后面发出,由content_length指定长度
发送总长是 sizeof(xxx) + xxx.content_length

接收方接收 sizeof(xxx) 字节到一个 xxx 里面以后,验证合法性,再接收 content_length 字节就行了

接收到content之后逐项解析 (key, value) 对,获取数据

最好还是定分通讯协议出来,包括报文头,长度,命令码,数据项个数,数据项ID,数据项内容,校验和,报文尾等。
然后根据此协议组织报文发送,接收的时候可以逐字节按照定义的协议解释。
通用的通讯程序都是这样开发的。