设为首页 加入收藏

TOP

1.4.2 具体编码(4)
2013-10-07 15:52:34 来源: 作者: 【 】 浏览:83
Tags:1.4.2 具体 编码

1.4.2  具体编码(4)

(9) 定义"确定"按钮的响应函数OnOK(),具体代码如下:

  1. void CIpmonDlg::OnOK()   
  2. {  
  3. if(NULL != m_threadID)  
  4. PostThreadMessage(m_threadID, WM_CLOSE, 0, 0);  
  5. if(m_IPArr.GetSize())  
  6. m_IPArr.RemoveAll();  
  7. CDialog::OnOK();  
  8. }  

(10) 定义函数threadFunc(LPVOID p),此函数是本项目的核心,用于监听网络线程。具体实现代码如下:
  1. UINT threadFunc(LPVOID p)  
  2. {  
  3. CIpmonDlg *pDlg = static_cast<CIpmonDlg*>(p);  
  4. char  buf[1000], *bufwork;  
  5. MSG   msg;  
  6. int   iRet;  
  7. DWORD dwErr;  
  8. char  *pSource, *pDest;  
  9. IPHEADER *pIpHeader;  
  10. in_addr ina;  
  11. char  szSource[16], szDest[16], szErr[50];  
  12. char *pLastBuf = NULL;  
  13.  
  14. int HdrLen, totallen;  
  15. WORD    sourport, destport;  
  16.  
  17. struct TCPPacketHead     *pTCPHead;  
  18. struct ICMPPacketHead *pICMPHead;  
  19. struct UDPPacketHead *pUDPHead;  
  20. BYTE     *pdata = NULL;  
  21.  
  22. PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);   
  23. //queue  
  24. pDlg->m_threadID = GetCurrentThreadId();  
  25.  
  26. while(TRUE)  
  27. {  
  28. if(PeekMessage(&msg, 0, WM_CLOSE, WM_CLOSE, PM_NOREMOVE))  
  29. {  
  30. closesocket(pDlg->m_s);  
  31. pDlg->m_threadID = 0;  
  32. pDlg->m_start.EnableWindow(TRUE);   
  33. break;  
  34. }  
  35. memset(buf, 0, sizeof(buf));  
  36. iRet = recv(pDlg->m_s, buf, sizeof(buf), 0);  
  37. if(iRet == SOCKET_ERROR)  
  38. {  
  39. dwErr = WSAGetLastError();  
  40. sprintf(szErr, "Error recv() = %ld ", dwErr);  
  41. continue;  
  42. }  
  43. else  
  44. if(*buf)  
  45. {     
  46. bufbufwork = buf;  
  47. pIpHeader = (IPHEADER*)bufwork;  
  48. WORD iLen = ntohs(pIpHeader->total_len);  
  49. while(TRUE)  
  50. {  
  51. if(iLen <= iRet)  
  52. {  
  53. ina.S_un.S_addr = pIpHeader->sourceIP;  
  54. pSource = inet_ntoa(ina);  
  55. strcpy(szSource, pSource);  
  56. ina.S_un.S_addr = pIpHeader->destIP;  
  57. pDest = inet_ntoa(ina);  
  58. strcpy(szDest, pDest);  
  59. CString str, strProto, strSourPort,   
  60. strDestPort, strData, strSize;  
  61. strProto = get_proto_name(pIpHeader->proto);  
  62. HdrLen = pIpHeader->header_len&0xf;  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.4.2 具体编码(3) 下一篇1.4.2 具体编码(5)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)