ProgSoft

A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every difficulty.

用户操作
[即时聊天] [发私信] [加为好友]
progsoftprogsoftID:progsoft
19449次访问,排名6453(1),好友1人,关注者3人。
我很懒暂时没有写
progsoft的文章
原创 21 篇
翻译 0 篇
转载 1 篇
评论 13 篇
progsoft的公告

朋友自远方来,不亦乐乎


个人简介
网名:progsoft
QQ:49753255(此号被盗,也许永远申请不回来了:()
MAIL:progsoftAT163.com

来自:湖南长沙

计数器

天气预报

最近评论
hdnero:wow gold
1:谢谢,恶呵呵
binder:hi,你好.不知道对新版的msn协议还有研究没有噢?
progsoft:希望对你有帮助,研究得怎么样,快1年没上网了。
荣:可我在记事本里面找不到UnprotectPassword字样呀,怎么办?有没其他办法了,有能否帮我回复到licuan20@163.com邮箱,谢谢
文章分类
收藏
相册
资料图片
MSN 论坛与协议
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 VxWorks操作系统复位实战(四)[by Progsoft] 收藏

新一篇: 网卡物理地址和MAC地址的几点感想 | 旧一篇: VxWorks操作系统复位实战(三)[by Progsoft]

该死的While循环解析

现在能告诉我,你发现错误了么?

如果你已经发现错误,那么请跳过本文,本文对你不适用。

对照协议规定的文本看,该程序应该是没有错误啊,怎么回事呢?

协议、协议 -- 协 + 议,说明这个东东是可以讨价还价的,谁能保证所有的程序设计者在所有的细节上面都能保证和协议文本一致,且理解一致呢?且协议这个东西归根还是人制定了,谁能保证最先制定的时候没有缺陷呢?早期的C的规范文本不就有很多未规定项,导致如今编译器支持上面各自发挥的状态,大家应该都有深受其害的经历。

扯远了一点,归根到底是没有人能保证所有程序都能按照协议文本来工作,没人能保证在某种情况下内容被改写(当然应有其他手段,这里不描述)

只要一个简单实例问题就出来了。

usLen = 100

             TAG   LEN   CONT  TAG   LEN?
aucBuffer = {0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x02, ... }

很显然错误出在

usOffset += aucBuffer[usOffset + 1];
如果aucBuffer[usOffset + 1]=0,伟大的死循环就诞生了。

应该怎么做呢?针对本问题,我的推荐做法如下: 

usOffset = 0;
usCount  
= 0;
while (usOffset < usLen)
{
    
/* 记录TAG */
    MsgContent[usCount].Tag 
= aucBuffer[usOffset];
    
/* 记录该TAG的内容长度 */
    MsgContent[usCount].Len 
= aucBuffer[usOffset + 1];
    
/* 记录该TAG的地址,注意此处一般不会将内容拷贝出来,到实际使用的时候在取 */
    MsgContent[usCount].Content 
= usOffset;
    
/* 如果TAG长度小于最小的可能长度则跳出,解码失败 */
    
if (aucBuffer[usOffset + 1< 2)
    
{
        
break;
    }
    
    
/* 解码下一个TAG的偏移 */
    usOffset 
+= aucBuffer[usOffset + 1];
    
/* 记录TAG数目 */
    usCount
++;
}


if (usOffset < usLen)
{
    
return ERROR;
}

本文为了说明问题,代码都十分之简单,在编写的时候可能还会考虑到,但一旦代码复杂度增加N倍时,这些异常还能保证考虑到么?

该方法解决了死循环的问题。但是万无一失了么?请看下回。

发表于 @ 2007年01月21日 02:08:00|评论(loading...)|编辑

新一篇: 网卡物理地址和MAC地址的几点感想 | 旧一篇: VxWorks操作系统复位实战(三)[by Progsoft]

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © progsoft