我爱辅助论坛

 找回密码
 【点我注册】

QQ登录

只需一步,快速开始

查看: 26706|回复: 247

[文章] 【wpe幼儿班】封包的组成和各部分含义(一)

  [复制链接]

签到天数: 18 天

[LV.4]偶尔看看III

发表于 2013-6-25 03:26:47 | 显示全部楼层 |阅读模式
接触了一段时间的网游封包设计,有了一些初步的思路,想借这篇文章总结一下,同时也作个记录,以利于以后更新自己的思路。
  网络游戏的技术研发,分为三个主要的方面:服务器设计,客户端设计,数据库设计。而在服务器和客户端之间实现游戏逻辑的中介则是游戏数据包,服务器和客户端通过交换游戏数据包并根据分析得到的数据包来驱动游戏逻辑。网络游戏的实质是互动,而互动的控制则由服务器和客户端协同完成,协同就必然要依靠数据来完成。
  当前网络游戏中的封包,其定义形式是各种各样的,但归纳起来,一般都具有如下要素:封包长度,封包类型,封包参数,校验码等。
  封包长度用于确定当前游戏数据包的长度,之所以提供这个数据,是因为在底层的TCP网络传输中,出于传输效率的考虑,传输有时会把若干个小的数据包合并成一个大的数据包发送出去,而在合并的过程中,并不是把每一个逻辑上完整的数据包全部合并到一起,
有时可能因为这种合并而将一个在逻辑上具有完整意义的游戏数据包分在了两次发送过程中进行发送,这样,当前一次的数据发送到接受方之后,其尾部的数据包必然造成了“断尾”现象,为了判定这种断尾的情况以及断尾的具体内容,游戏数据包在设计时一般都会提供封包长度这个信息,根据这个信息接受方就知道收到的包是否有断尾,如果有断尾,则把断尾的数据包与下次发过来的数据包进行拼接生成原本在逻辑意义上完整的数据包。
  封包类型用于标识当前封包是何种类型的封包,表示的是什么含义。
  封包参数则是对封包类型更具体的描述,它里面指定了这种类型封包说明里所必须的参数。比如说话封包,它的封包类型,可以用一个数值进行表示,而具体的说话内容和发言的人则作为封包参数。
  校验码的作用是对前述封包内容进行校验,以确保封包在传递过程中内容不致被改变,同时根据校验码也可以确定这个封包在格式上是不是一个合法的封包。
以校验码作为提高封包安全性的方法,已经是目前网游普遍采用的方式。封包设计,一般是先确定封包的总体结构,然后再来具体细分有哪些封包,每个封包中应该含有哪些内容,最后再详细写出封包中各部分内容具体占有的字节数及含义。
  数据包的具体设计,一般来说是根据游戏功能进行划分和圈定的。比如游戏中有聊天功能,那么就得设计客户端与服务器的聊天数据包,客户端要有一个描述发言内容与发言人信息的数据包,而在服务器端要有一个包含用户发言内容及发言人信息的广播数据包,通过它,服务器端可以向其他附近玩家广播发送当前玩家的发言内容。再比如游戏中要有交易功能,那么与这个功能相对应的就可能会有以下数据包:申请交易包,申请交易的信息包,允许或拒绝交易包,允许或拒绝交易的信息包,提交交易物品包,提交交易物品的信息包,确认交易包,取消交易包,取消交易的信息包,交易成功或失败的信息包。需要注意的是,在这些封包中,
有的是一方使用而另一方不使用的,而有的则是双方都使用的包。比如申请交易包,只可能是一方使用,而另一方会得到一个申请交易的信息包;而确认交易包和提交交易物品这样的数据包,都是双方在确定要进行交易时要同时使用的。封包的设计也遵从由上到下的设计原则,即先确定有哪些功能的封包,再确定封包中应该含有的信息,最后确定这些信息应该占有的位置及长度。一层层的分析与定义,最终形成一个完善的封包定义方案。在实际的封包设计过程中,回溯的情况是经常出现的。由于初期设计时的考虑不周或其它原因,可能造成封包设计方案的修改或增删,这时候一个重要的问题是要记得及时更新你的设计文档。在我的封包设计中,我采用的是以下的封包描述表格进行描述:
  封包编号   功能描述  对应的类或结构体名  类型命令字  命令参数结构体及含义 
  根据游戏的功能,我们可以大致圈定封包的大致结构及所含的大致内容。
但是,封包设计还包含有其它更多的内容,如何在保证封包逻辑简洁的前提下缩短封包的设计长度提高封包的传输速度和游戏的运行速度,这也是我们应该考虑的一个重要问题。一般情况下,设计封包时,应该尽量避免产生一百字节以上的封包,多数封包的定义控制在100字节以内,甚至20-50字节以内。在我所定义的封包中,多数在20字节以内,对于诸如传递服务器列表和用户列表这样的封包可能会大一点。总之一句话,应该用尽可能短的内容尽可能简洁清晰地描述封包功能和含义。

评分

参与人数 1金钱 +1 收起 理由
Sakura彡 + 1 赞一个!

查看全部评分

温馨提示:为了保护系统安全,使用辅助前,请务必使用影子系统。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

签到天数: 77 天

[LV.6]常住居民II

发表于 2013-6-25 12:27:20 | 显示全部楼层
- - 我去年买了只炉里

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 4 反对 1

使用道具 举报

签到天数: 45 天

[LV.5]常住居民I

发表于 2013-6-25 12:26:54 | 显示全部楼层
{:soso_e117:}盗版可耻! 贴吧的?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 5 反对 0

使用道具 举报

签到天数: 45 天

[LV.5]常住居民I

发表于 2013-6-25 10:37:38 | 显示全部楼层
???????????????????????{:4_145

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 5 反对 0

使用道具 举报

签到天数: 41 天

[LV.5]常住居民I

发表于 2013-6-25 08:58:08 | 显示全部楼层
感觉好复杂的。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 4 反对 0

使用道具 举报

签到天数: 93 天

[LV.6]常住居民II

发表于 2013-6-25 08:41:48 | 显示全部楼层
感谢楼主的教程!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 2 反对 0

使用道具 举报

该用户从未签到

发表于 2014-7-15 02:52:26 | 显示全部楼层
盗版可耻! 贴吧的?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 0 反对 1

使用道具 举报

签到天数: 15 天

[LV.4]偶尔看看III

发表于 2014-7-15 16:04:04 | 显示全部楼层
回复看内容

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 1 反对 0

使用道具 举报

该用户从未签到

发表于 2014-7-13 21:36:19 | 显示全部楼层
楼主好人呀

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 1 反对 0

使用道具 举报

签到天数: 11 天

[LV.3]偶尔看看II

发表于 2014-7-13 22:03:08 | 显示全部楼层
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 1 反对 0

使用道具 举报

该用户从未签到

发表于 2014-7-12 17:50:33 来自手机 | 显示全部楼层
感谢分享。。。。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 1 反对 0

使用道具 举报

签到天数: 299 天

[LV.8]以坛为家I

发表于 2013-6-25 07:47:03 | 显示全部楼层
沙发  楼主好人啊  一直对WPE似懂非懂的

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 1 反对 0

使用道具 举报

yueshen66 该用户已被删除
发表于 2013-6-25 12:28:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

该用户从未签到

发表于 2013-6-25 13:08:11 | 显示全部楼层
感谢楼主分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

签到天数: 15 天

[LV.4]偶尔看看III

发表于 2013-6-25 22:42:41 | 显示全部楼层
dddddddddddddddddfffffffffff

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【好评】【金币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 【点我注册】

本版积分规则

QQ|小黑屋|我爱辅助 ( 辽ICP备19006053号-1 )

GMT+8, 2025-5-2 12:22 , Processed in 0.043795 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表