CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

winpcap pcap_breakloop问题,诚心请教各位

楼主flyfish99(菜鱼)2005-11-05 13:43:38 在 VC/MFC / 网络编程 提问

您好,我现在用wpcap3.1在vc里面做开发~  
  我现在能够成功得抓取包信息并进行分析了  
  可是做法是把有关wpcap的函数及其处理函数都写成全局函数  
  现在我想把处理包的函数也当成类的成员函数来处理  
  所以我把他们都加入到了类里面  
  可是现在的问题出现了,好像我的pcap_loop过程终止不了了~  
  以前都用pcap_breakloop终止的,现在pcap_breakloop(adhandle)似乎不工作了都~  
  ----------------  
  我的代码的工作流程是:抓包按钮按下后启动一个线程执行pcap_loop语句,并检测是否有break_loop请求;结束按钮通过发送一个event信号通知接触pcap_loop操作,接触抓包过程  
  ----------------  
  全局函数时正确的代码为:  
  void   CMyGetPacketDlg::OnDump()    
  {  
  ..............  
  hthread   =   CreateThread(NULL,NULL,main_thread,NULL,0,&threadID);  
  .............  
  }  
  线程处理函数为(全局函数):  
  DWORD   WINAPI   main_thread(LPVOID   lpParameter)  
  {  
  int   code;  
  .........  
  code   =   pcap_loop(adhandle,0,packet_dispatch,(unsigned   char*)dumper);  
  if   (code   ==   -1)  
  MessageBox(NULL,"pcap_loop调用出错","信息",MB_OK);  
  if   (code   ==   -2)  
  MessageBox(NULL,"pcap_loop正常中断","信息",MB_OK);  
  .........  
  return   0;  
  }  
  ------------------  
  packet_dispatch处理函数(也是全局函数)为:  
  void   packet_dispatch(unsigned   char*   dumper,   const   struct   pcap_pkthdr   *header,   const   u_char   *pkt_data)  
  {  
  ...........  
                    /*hEvent为一通知Loop过程退出的事件,时间由结束抓包按钮发出*/  
  if   (WaitForSingleObject(hEvent,0)   !=   WAIT_TIMEOUT)  
  {  
                                      /*退出loop过程*/  
  pcap_breakloop(adhandle);  
  return   ;  
  }  
  //--------------------  
                    /*下面的代码是处理各种类型包的子线程,关键部分是上面的代码*/  
  ipph   =   (ip_header*)(pkt_data+14);  
  switch   (ipph->ip_p){  
  case   ICMP:  
  //handle_icmp(dumper,   header,pkt_data);  
  CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)handle_icmp,(LPVOID)tp,0,NULL);  
  break;  
                      .........  
  return;  
  }  
  ----------------------------------  
  最后,退出抓包按钮的代码是:  
  void   CMyGetPacketDlg::Onstopcap()    
  {  
  SetEvent(hEvent);//设置终止抓包事件  
  WaitForSingleObject(hthread,INFINITE);  
  CloseHandle(hthread);  
  CloseHandle(mutex_icmp);  
  CloseHandle(mutex_udp);  
  CloseHandle(mutex_tcp);  
  pcap_close(adhandle);  
  }  
  ----------------------------------------------------------  
  上面的代码可以实现我的要求,可是由于太多处理函数都是公共函数,所以我想把他们纳入我的主类里面  
  所以我把上面设计的所以回调函数定义成类的静态成员函数,可是问题出来了,就是  
  当我按下stop按钮以后  
  WaitForSingleObject(hthread,INFINITE);  
  一直处于等待状态,而且main_thread函数一直在执行loop操作,因为没有出现对话框提示loop过程结束  
  我通过调试发现  
  if   (WaitForSingleObject(hEvent,0)   !=   WAIT_TIMEOUT)  
  {  
                                      /*退出loop过程*/  
  pcap_breakloop(adhandle);  
  return   ;  
  }  
  上面的pcap_breakloop(adhandle);语句已经被执行了的;既然执行了,为什么loop函数还不结束呢?  
   
  我就是把全局函数改变成了类成员函数以及其他不想关的地方,比如messagebox   changed   to   afxmessagebox   ,请教搞过wpcap的帮帮忙  
   
  谢谢了~  
   
   
  问题点数:50、回复次数:4Top

1 楼kingzai(stevenzhu)回复于 2005-11-05 14:05:22 得分 50

好像是要写成全局函数的,可以参考我以前回答的有关winpcap的帖子Top

2 楼flyfish99(菜鱼)回复于 2005-11-05 14:12:27 得分 0

我看了,就是现在的搜索功能不能全文搜索~  
  好的,那我试一试吧main放在全局看看  
  不过现在去吃午饭了~  
  谢谢   kingzai(stevenzhu)   (Top

3 楼iceworld819(冰域)回复于 2005-11-05 14:15:01 得分 0

顶Top

4 楼xiangding(一蓑烟雨任平生!)回复于 2005-11-07 22:54:48 得分 0

学习Top

相关问题

  • WinPcap中,LPADAPTER和pcap_t能进行转换吗
  • winpcap???
  • 关于WinPcap开发文档中的pcap_live_dump例子的问题??
  • winpcap发包的问题:为什么我调用pcap_sendpacket()时系统会当机(蓝屏)?
  • [网络开发]winpcap开发包的使用问题,pcap_lookupdev函数的使用,在线等待
  • 诚心请教
  • 诚心请教!
  • 诚心请教!!!
  • 诚心求教~~~
  • 诚心征婚

关键词

  • 函数
  • code
  • null
  • breakloop
  • pcap
  • 全局
  • loop
  • 处理

得分解答快速导航

  • 帖主:flyfish99
  • kingzai

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo