友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

末日编程者-第87章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




    业务协议层:主要是处理某个用户要与某人通讯,然后给某人发出消息,断开等等约定。

    协议说白了也算一种数据结构,只不过他们传播的方式是流状的,而代码去解析也需要逐步去解析,就好比写信的时候,我要告诉你一件事情,但是我雷打不动,信的第一行写的肯定是你的名字,后面才跟着是我写给你的内容。

    当然没有写信那么简单,我们可能在主消息体前面加了很多标示,就像之前所说的,第一层用两个字节使用I标识,这个是属于这个通讯系统的占位符,第二层用四个字节传入了一个时间,第三层用个字节传了一个短整形7,标识这个文本的业务是传输消息,第四层用了四个字节放了一个长整形标识之后消息体的字节长度,第五层才能使用刚刚读到的消息体长度,才可以拿到定长的消息体。

    在这之后,还需要解码消息体,得到真正的消息,不过这个东西一般写在客户端,服务器只负责传输就好了。

    当然以上的描述只是个栗子,而真正应用中比这些数据更多、更复杂,比如一个用户传递消息给另一个用户,如果要交给另一个用户,不仅服务器要识别这个消息体发送人的身份,还要识别传递给那个人的是否存在,能不能发送等等。

    功能层主要就是进行数据的一些处理,比如以下代码:

    int endeLng(lng lng int sr,unsigned har **ret,int amp;ap;ap;len)

    {

    unsigned har *buf =(unsigned har*)all(9);

    eset(buf,0,9);

    unsigned har *p = buf;

    *p++|= LPUSH_FT_LNG;

    *p++|=(sramp;ap;amp;ap;5)amp;ap;ap;0FF;

    *p++|=(sramp;ap;amp;ap;48)amp;ap;ap;0FF;

    *p++|=(sramp;ap;amp;ap;40)amp;ap;ap;0FF;

    *p++|=(sramp;ap;amp;ap;32)amp;ap;ap;0FF;

    *p++|=(sramp;ap;amp;ap;24)amp;ap;ap;0FF;

    *p++|=(sramp;ap;amp;ap;)amp;ap;ap;0FF;

    *p++|=(sramp;ap;amp;ap;8)amp;ap;ap;0FF;

    *p++|=(sr)amp;ap;ap;0FF;

    len = 9;

    *ret = buf;。。

    return 0;

    }

    这段代码的作用就是把一个长整型的数据封装进入字节流,并且字节流的首地上返回给二级指针。

    业务模块就好理解很多了,比如转发一个客户端传递来的消息,通过用户id的标示找到相应的用户,再从用户注册在服务器的消息找到相应的客户端,然后把消息通过sket传输给另外的客户端。

    韩海花了整整半夜才完成了服务器的编写,要不是很多东西他都写过,也不可能这么快,一个新手如果写一个聊天服务器,从入门到上手就需要一个月,当然新手是指的工科毕业生的水平。

    接下来该编写客户端了,客户端和服务器就不同了,客户端需要一个载体,这个韩海早想到了,这个时候豌豆射手的攻击,已经无法破开普通丧尸的防御了,所以韩海准备把它改成通讯工具,想想大家每人肩膀上一个豌豆射手,然后对着它的炮筒通话是中什么样的画面。

    韩海一想到这个,就感觉有无穷的动力,作为一个理工男的恶趣,还真不是一般人可以理解的。

    韩海回了回神,打开了豌豆射手的数据模型,然后开始了长时间的阅读,这一次因为还是改写炮筒攻击方位的模块,所以他是有操作权限的。

    但是这一次韩海需要大改这个模块的函数了,因为韩海要把攻击的功能,完全改写成一个收听声音和播放声音的组建,好在豌豆射手天生有听觉模型,并且在炮筒上也长着嘴巴,韩海只需要把这两样功能模块,进行取样和转发就可以了。

    到了这一步,韩海就必须使用钩子技术了,他一共编写了2个篡改函数,因为函数的原型韩海可以看到,所以篡改以后的函数可以无缝对接原来的功能,从而不影响以前的程序。

    第一个篡改的是豌豆射手收听声音的函数,他只不过是从中截取了每一帧声音的数据。

    第二个篡改的是豌豆射手发声的函数,这一次他需要在发出声音的队里中,加入自己从sket收到的声音数据。

    豌豆射手声音的样板是标准的P,也就是Pulse de dulatin,即为脉冲编码调制。

    在光纤通信系统中,光纤中传输的是二进制光脉冲“0”码和“”码,它由二进制数字信号对光源进行通断调制而产生。而数字信号是对连续变化的模拟信号进行抽样、量化和编码产生的,称为P(Pulse…de dulatin),即脉冲编码调制。

    而这种样本数据一般数量级比较大,不利于传输,所以韩海使用了一个通用压缩标准AA进行编码传输,AA即是高级音频编码(Advaned Audi ding)。

    目前韩海可以粗略的实现AA的编码步骤,这种压缩编码算法是有损失的算法,原理采样一段时间内的P数据,然后使用傅里叶变幻编解码,声音其实就是不同频域的振幅,叠加起来的正弦波,编码算法其实就是进行时域正弦波叠加成近方型的正弦波,而解码就是使用傅里叶反变换,把叠加正弦波解码成原来一段段的正弦波。(这里只是粗略的进行编解码)

    再之后的步骤,把压缩后的音频向服务器进行发送就可以了,再由服务器转发到另外的客户端,当客户端接收到音频消息的时候,再运行篡改后的发声函数,这样就达到了通讯的目的。

    当然客户端也必须建立一套身份标识,否则通讯就无从寻找联系人了,这一点韩海已经想到了,当建立模型的时候,韩海可以给每个豌豆射手设置一个数字号码,当有人想要通讯的时候,在豌豆射手上拨号就可以了,而且系统内部还建立的群组概念,其实就是聊天群,联系人可以在群里发信息与群组内的所有人通讯。

    之后韩海还编写了一套聊天界面,他把豌豆射手一侧绿色的表皮,变成动态的屏幕,这样用户就既可以发送声音也可以发送文字了。(参考QQI)

    目前韩海并没有开发视频聊天的功能,因为视频的编码比起声音来说复杂了不止一点,这是他以前学习中所欠缺的内容,这需要他再学习下H24视频编码后才可以实现,所以这里他留下了一个扣子,只有等以后再改进了。

    做完这些,韩海把sket连接的函数写好,然后仔仔细细观察起写好的代码来,这是他许久以来养成的习惯,没有一个程序员,敢说自己写的程序没有BUG,如果有人说了,那么只是他没发现而已。

    没一会儿,韩海又修改了几处地方,然后仔仔细细再看了一遍,直到发现不了问题后,他才送了一口气。

    在这个时候,他才感觉到一股困意袭来,显然大量代码的编写,耗费了他大量的精力,这使得他心中一惊,因为明天还有事情做,想到这里他不敢怠慢,开始放空自己的脑袋,真正不去思想东西,这才沉沉的睡了过去。

正文 第七十五章 战后的北城区

    一夜无话,次日清晨,当夏日的朝阳进入驻地大厦顶层的时候,韩海不由的睁开了眼睛,他站起身来抖擞了下精神,随后向着大厅中央走去。

    当韩海快走到大厅中央的时候,不由站住了脚步,然后悄悄的看着眼前的一幕。

    此刻的凤凰已经睁开了双眼,正在与章龙对视,并且看气氛,算不上很融洽。

    只听章龙这样说道:“凤凰,你不能下床,让我们去给你取药就行了,你现在需要休息。”

    听了章龙的话,凤凰脸色都未变,她淡淡的瞥了章龙一眼,随后道:“我要怎么做,还轮不到你来管。”说完凤凰就坐起了身,然后来到地上,不过就在此时,她的腿部一软再次坐在了床上。

    章龙见状,马上上前准备要搀扶凤凰,但是就在此时凤凰淡淡的开口说道:“你用什么地方扶我,我就把你那个部位烧成渣。”

    章龙听了,只好一脸谄谄的停下了自己的动作,只能在旁边干站着。

    韩海见状受不了了,没想到凤凰这个人这么傲,到了现在了还在耍她的脾气,一定要教训教训她,想到这里韩海开口说道:“凤凰会主,章龙大哥从昨天晚上就守了你一夜,你看他都没合眼。”

    的确,章龙是守了凤凰一夜,此时的眼眶还是红红的,并且精神上非常疲惫。

    凤凰听了韩海的话,脸色都未变,只是淡淡的看
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!