|
2.3.2 具体编码(2)
(3) 编写nbtstat线程函数NbtstatThread(LPVOID param),用于向指定范围的IP发送数据。具体代码如下:
- UINT NbtstatThread(LPVOID param)
- {
- //循环对要查询的IP发数据
- do
- {
- if(bExit) //是否退出线程
- {
- AfxMessageBox("exit thread!");
- pDlg->GetDlgItem(IDC_BTN_SEND)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_EDIT1)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_SPIN1)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_IPADDRESS1)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_IPADDRESS2)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_BTN_EXIT)->EnableWindow(false);
- bExit = false;
- return 1;
- }
- pDlg->m_strIP.Format("%d.%d.%d.%d",B1[0],B1[1],B1[2],B1[3]);//得到IP
- pDlg->m_ListBox.InsertString(0,
- pDlg->m_strIP); //将该IP插入ListView的IP字段
- if(B1[3]!=0 && B1[2]!=0)
- pDlg->m_UDPSocket.SendTo((void*)bs, 50,
- destPORT, pDlg->m_strIP, 0); //向指定的IP发数据报
- int nWait = pDlg->m_spin.GetPos(); //设置超时
- WaitForSingleObject(
- wait_handle, // 等待事件的句柄
- nWait // 超时
- );
- ResetEvent(wait_handle); //将事件重新置回非触发状态
- //=============================================
- //生成下一个要查询的IP
- if(B1[2] <= B2[2])
- {
- if(B1[3] < B2[3]) B1[3]++;
- else if(B1[2]<B2[2] && B1[3]<255) B1[3]++;
- else if(B1[2]<B2[2] && B1[3]==255)
- {
- B1[3] = 0;
- B1[2]++;
- }
- }
- else break;
- if(B1[3]>=B2[3] && B1[2]>=B2[2]) break;
- } while(B1[2]<=255 && B1[3]<=255);
- pDlg->m_ListBox.InsertString(0, "-----complete!-----");
- pDlg->GetDlgItem(IDC_BTN_SEND)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_EDIT1)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_SPIN1)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_IPADDRESS1)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_IPADDRESS2)->EnableWindow(true);
- pDlg->GetDlgItem(IDC_BTN_EXIT)->EnableWindow(false);
- return 0;
- }
|