当前位置: 技术问答>linux和unix
一个用于联网的客户端客户端程序,运行两次结果不一样
来源: 互联网 发布时间:2016-09-20
本文导语: 因为源代码比较长,所以只把出错部分贴出,T是我定义的一个追踪宏,用于打印所在文件名及所在行数 T //194行 switch( pkt_data[0x12] ) //分析EAP包类型 ...
因为源代码比较长,所以只把出错部分贴出,T是我定义的一个追踪宏,用于打印所在文件名及所在行数
连续运行两次,会出现如下结果:
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下的网络编程还是第一次碰到,欢迎高手来诊断!因为代码很长只能帖这么多,所以大家就尽管尽情的猜测一下,只要以前遇到类似问题的不妨都说以下。分是少不了的!:)
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,看看这个段错误到底发生在哪里。
段错误不外乎空指针、野指针、越界之类,不难查。
最好还是用gdb在关键行设置断点,然后追踪变量的变化。
既然217行后面出现了段错误,那就可以在218行或者break之后的地方再加几个T,看看这个段错误到底发生在哪里。
|
查看数组下标和发送接收是否正常