vc关于远程控制程序的键盘记录功能代码
这几天在写一个简单远程控制程序,通信用的是CSocket类,今天在加一个远程键盘记录功能的时候出了一点问题。
键盘记录(用钩子实现)在本地程序测试的时候没有问题,当我把这个功能加在被控端的时候,出问题了,我粘代码。 如下:
JavaScript code
unsigned int StartServer(LPVOID lParam) { AfxSocketInit(); CSocket aSocket, clientSocket; aSocket.Socket(); BOOL bOptVal = TRUE; int bOptLen = sizeof(BOOL); aSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET); aSocket.Bind(nPort); aSocket.Listen(10); //循环接收指令 while(1) { if(!aSocket.Accept(clientSocket)) { continue; } else { char szRecvMsg[256] = {0}; clientSocket.Receive(szRecvMsg, 256); if ( !strcmp(szRecvMsg, "StartHook") ) //设置全局钩子,开启键盘记录 { InstallLaunchEv(); } else if ( !strcmp(szRecvMsg, "KillHook") ) //结束全局钩子 { CloseHook(); } else { AfxMessageBox("未知指令"); clientSocket.Close(); } } } aSocket.Close(); clientSocket.Close(); return 0; }
这是被控端中的一段代码,也是出问题的代码。
我把其中一些错误处理代码以及一小部分无关代码删除了,为了缩短程序代码长度。
这里可以收到服务端发来的 StartHook ,并执行InstallLaunchEv(); (关于此函数实现请参考http-://blog.-csdn.-net/jaminwm/article/details/463940 )
\然后程序回到aSocket.Accept();
这时程序就崩溃了!请大神指导下~求解啊!!!!
clientSocket好像不能重复利用,还是把定义弄到while(1)里面比较好.