帮我看一下这两端代码

ffa15 2008-07-08 01:11:50
这两端代码实现什么功能?请各位指教!



DWORD WINAPI DoScanPort(LPVOID lpParam)
{
DWORD dwRet;
short nPort = *(short*) lpParam;
delete lpParam;

SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
{
AfxMessageBox("创建套接字失败!");
dwRet = ERROR_CREATE_SOCKET;
}
else
{
unsigned long flag = 1;
if ((ioctlsocket(sock, FIONBIO, &flag) != 0))
{
AfxMessageBox("未能改为非阻塞模式!");
dwRet = ERROR_MODIFY_FIONBIO;
}
else
{
sockaddr_in severAddr;
severAddr.sin_family = AF_INET;
severAddr.sin_port = htons(nPort);
severAddr.sin_addr.S_un.S_addr = g_ulAddr;
connect(sock, (sockaddr*)&severAddr, sizeof(severAddr));

struct fd_set mask;
FD_ZERO(&mask);
FD_SET(sock, &mask);

struct timeval timeout;
timeout.tv_sec = g_dwTimeOut / 1000;
timeout.tv_usec = g_dwTimeOut % 1000;

switch(select(0, NULL, &mask, NULL, &timeout))
{
case -1:
dwRet = ERROR_SELECT;
break;

case 0:
dwRet = ERROR_SELECT_TIMEOUT;
break;

default:
dwRet = ERROR_SUCCESS;
};
}
closesocket(sock);
}
g_nThreadCount --;
if (dwRet == ERROR_SUCCESS)
{
::SendMessage(g_hWnd, SCAN_THREAD, DOSCAN_FIND_PORT, nPort);
}
else
{
::SendMessage(g_hWnd, SCAN_THREAD, DOSCAN_END_PORT, nPort);
}
return dwRet;
}

DWORD WINAPI StartScan(LPVOID lpParam)
{
tag_PORTS* pScanParam = (tag_PORTS*)lpParam;

DWORD dwThreadId;
unsigned short i;

if (pScanParam->bSepecifiedPort)
{
for(i=0; i<=pScanParam->nCount; i++)
{
if (g_bTerminate)
{
break;
}
while(g_nThreadCount >= g_nMaxThread)
{
Sleep(10);
}

if (CreateThread(NULL, 0, DoScanPort, (LPVOID)new short(pScanParam->nArrOfPorts[i]), 0,

&dwThreadId) != NULL)
{
g_nThreadCount ++;
}
}
}
else
{
for(i=pScanParam->iStartPort; i<=pScanParam->iEndPort; i++)
{
if (g_bTerminate)
{
break;
}
while(g_nThreadCount >= g_nMaxThread)
{
Sleep(10);
}


if (CreateThread(NULL, 0, DoScanPort, (LPVOID)new short(i), 0, &dwThreadId) != NULL)
{
g_nThreadCount ++;
}
}
}


while (g_nThreadCount > 0)
{
Sleep(50);
}
::SendMessage(g_hWnd, SCAN_THREAD, STARTSCAN_COMPLETE, 0);
delete pScanParam;
return ERROR_SUCCESS;
}
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ffa15 2008-07-08
  • 打赏
  • 举报
回复
LS的可以详细解析一下吗?
Crob 2008-07-08
  • 打赏
  • 举报
回复
扫描g_ulAddr变量所指的地址上的被使用的端口。

DoScanPort是线程执行函数,其中通过SendMessage来通知g_hWnd的窗口句柄,被扫描到的每个端口是DOSCAN_FIND_PORT还是DOSCAN_END_PORT
cnzdgs 2008-07-08
  • 打赏
  • 举报
回复
用线程循环扫描端口。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧