当前位置:  技术问答>linux和unix

一个用于联网的客户端客户端程序,运行两次结果不一样

    来源: 互联网  发布时间:2016-09-20

    本文导语:  因为源代码比较长,所以只把出错部分贴出,T是我定义的一个追踪宏,用于打印所在文件名及所在行数         T  //194行                 switch( pkt_data[0x12] )        //分析EAP包类型            ...

因为源代码比较长,所以只把出错部分贴出,T是我定义的一个追踪宏,用于打印所在文件名及所在行数

        T  //194行
                switch( pkt_data[0x12] )        //分析EAP包类型
                {
                          case 0x01:        //表示请求
                                    switch( pkt_data[0x16] )
                                    {
                                        case 0x01:   //要求发送用户名
                                                if (linkstate == ONLINE)//在线状态, 服务器要求更新连接(约每两分钟更新一次)
                                                        {T
                                                                count_wait_for_refresh=0;       
                                                                //置等待更新时间为零
                                                        }
                                                 
                                                else if(linkstate == SEARCHING_SERVER){ //正在联接
                                                     T   count_search_server=0;
                                                        //set_gui_state(UI_SEND_NAME);
                                                     T   linkstate=SEND_NAME;
                                                        if (isFirstPacketFromServer) //获得服务器的MAC地址
                                                        {
                                                           T     memcpy( l_destMAC, pkt_data+6, 6);                                                      isFirstPacketFromServer=0;
                                                        }
                                                        ++count_send_name;
                                                  }
                                          T      (void)SendNamePacket(l, pkt_data);  //217行
                                                break;
                                        case 0x99:   //发送密码(经过加密算法处理)
                                           T     if(linkstate != SEND_NAME)continue;
                                                count_send_name=0;
                                                linkstate=SEND_PASSWORD;
                                                ++count_send_password;
                                               // set_gui_state(UI_SEND_PASSWORD);
                                                (void)SendPasswordPacket(l, pkt_data);
                                                break;
                                    }
                                    break;
                          case 0x03:         //认证成功
                                T    if(linkstate != SEND_PASSWORD) continue;
                                    count_send_password=0;
                                    linkstate=ONLINE;
                                    
                               T   //  set_gui_state(UI_CONFIGURE);
                                        //调用ifup来获得网络配置,这需要3到10秒的时间
                                    sprintf(buffer,"ifdown %s",config_info.interface);
                                    system(buffer);
                                    sprintf(buffer,"ifup %s",config_info.interface);
                                    system(buffer);
                                        //大功告成,终于连好了
                                   // set_gui_state(UI_ONLINE);
                                    break;

连续运行两次,会出现如下结果:
tyh@tyh-laptop:~/linkage/linkagecui$ sudo ./linkapp
[sudo] password for tyh: 
main.C---52
main.C---53
>> Searching for Server ...
linkthread.C---103
linkthread.C---117
linkthread.C---189
linkthread.C---191
linkthread.C---194
tyh@tyh-laptop:~/linkage/linkagecui$ sudo ./linkapp
main.C---52
main.C---53
>> Searching for Server ...
linkthread.C---103
linkthread.C---117
linkthread.C---189
linkthread.C---191
linkthread.C---194
linkthread.C---208
linkthread.C---210
linkthread.C---213
linkthread.C---217
段错误
两次代码运行到了不同的区域,很想知道这时怎么回事!因为是在改写一个别人写的程序,Linux下的网络编程还是第一次碰到,欢迎高手来诊断!因为代码很长只能帖这么多,所以大家就尽管尽情的猜测一下,只要以前遇到类似问题的不妨都说以下。分是少不了的!:)

|
两次运行不一样,可能是因为pkt_data内容不同吧。
段错误不外乎空指针、野指针、越界之类,不难查。
最好还是用gdb在关键行设置断点,然后追踪变量的变化。
既然217行后面出现了段错误,那就可以在218行或者break之后的地方再加几个T,看看这个段错误到底发生在哪里。

|
查看数组下标和发送接收是否正常

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请推荐一套可在目前主流PC上运行的UNIX(非LINIX)操作系统和开发工具(C,C++),用于学习,最好是盗版,可在那个ftp站上下载
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 一个用于番茄工作法的计时器 小番茄
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 用于文本抽取的模式匹配语言 TXR
  • 什么是Docker?Docker通常用于如下场景
  • 鼠标dragged时,怎么做出虚框效果,用于选中物件?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 谁能提供一些 Java 平台用于小型网络设备的平台的资料?
  • VisiBroker For C++ 可以用于 EJB 吗?
  • make menuconfig是专门用于编译内核的吗?
  • 大家来讨论一下,在linux下除了openGL还有什么可以用于多媒体视频开发的接口库?
  • 请问大家开发linux内核一般是在做/用于什么项目?
  • 请问:syslog能否用于多线程或者多进程的程序中进行写日志啊?
  • Liunx用于服务器方面请教
  • clonezilla能用于磁盘阵列吗?
  • hexdump工具不能用于目录吗?
  • 用于测试的邮件服务器 Mockemail
  • 怎样用JDK写用于ASP的组件?最好有例子或详细资料!
  • 40G硬盘全部用于linux,分区时有什么好的建议?
  • 属性owner不可用于数据库xxx的解决方法
  • 我没用过Java,请问各位大侠Java中除了/*...*/用作注释外,还有什么符号可用于注释符?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3