这是一个远程控制server端的代码,我不明白其中的GetData()函数的意思。
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ MSG msg;
//Register
Register();
//Hide in Process
HideProcess();
//Initialization Winsock
if (!InISock())
return 0;
//Connect Winsock
if (!ConnectSock())
return 0;
//GetData
while(true)
{
//AcceptData
if (!AcceptData())
{
WSACleanup();
exit(1);
} //GetMesage
if(!GetData())
{
...
}
//下面是GetData()的实现代码
BOOL GetData()
{
//Define Variable
int iMsg,length;
POINT point;
int FALG;
//Send Falg
FALG = US_FLAG;
send(NewSock,(char*)&FALG,sizeof(FALG)+1,MSG_OOB); //send什么?? //Get Message
length = recv(NewSock,(char*)&iMsg,sizeof(iMsg)+1,0);
if (length < 0)
{
//Close Sock
closesocket(NewSock);
closesocket(ClientSock);
return FALSE;
}
//GetMessageData
if (iMsg < 4500) //MouseEvent
{
send(NewSock,(char*)&SysWidth,sizeof(SysWidth)+1,MSG_OOB);
send(NewSock,(char*)&SysHeight,sizeof(SysHeight)+1,MSG_OOB);
point = GetMousePoint();
}
switch(iMsg)
{
case US_DESKTOPBIT: //SendDesktopBitmap
SendDesktop();
break;
case US_MOUSEMOVE: //MouseMove
MouseMove(point);
break;
case US_MOUSELD: //MouseLeftDown
MouseLD(point);
break;
case US_MOUSELU: //MouseLeftUp
MouseLU(point);
break;
case US_MOUSERD: //MouseRightDown
MouseRD(point);
break;
case US_MOUSERU: //MouseRightUp
MouseRU(point);
break;
case US_LOCK:
SysEvent(US_LOCK);
break;
case US_UNLOCK:
SysEvent(US_UNLOCK);
break;
}
return TRUE;
}我不知道为什么GetData()中既有send,还有receive()这是为什么,而且send发送的内容是什么?请给予解释啊。
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ MSG msg;
//Register
Register();
//Hide in Process
HideProcess();
//Initialization Winsock
if (!InISock())
return 0;
//Connect Winsock
if (!ConnectSock())
return 0;
//GetData
while(true)
{
//AcceptData
if (!AcceptData())
{
WSACleanup();
exit(1);
} //GetMesage
if(!GetData())
{
...
}
//下面是GetData()的实现代码
BOOL GetData()
{
//Define Variable
int iMsg,length;
POINT point;
int FALG;
//Send Falg
FALG = US_FLAG;
send(NewSock,(char*)&FALG,sizeof(FALG)+1,MSG_OOB); //send什么?? //Get Message
length = recv(NewSock,(char*)&iMsg,sizeof(iMsg)+1,0);
if (length < 0)
{
//Close Sock
closesocket(NewSock);
closesocket(ClientSock);
return FALSE;
}
//GetMessageData
if (iMsg < 4500) //MouseEvent
{
send(NewSock,(char*)&SysWidth,sizeof(SysWidth)+1,MSG_OOB);
send(NewSock,(char*)&SysHeight,sizeof(SysHeight)+1,MSG_OOB);
point = GetMousePoint();
}
switch(iMsg)
{
case US_DESKTOPBIT: //SendDesktopBitmap
SendDesktop();
break;
case US_MOUSEMOVE: //MouseMove
MouseMove(point);
break;
case US_MOUSELD: //MouseLeftDown
MouseLD(point);
break;
case US_MOUSELU: //MouseLeftUp
MouseLU(point);
break;
case US_MOUSERD: //MouseRightDown
MouseRD(point);
break;
case US_MOUSERU: //MouseRightUp
MouseRU(point);
break;
case US_LOCK:
SysEvent(US_LOCK);
break;
case US_UNLOCK:
SysEvent(US_UNLOCK);
break;
}
return TRUE;
}我不知道为什么GetData()中既有send,还有receive()这是为什么,而且send发送的内容是什么?请给予解释啊。
解决方案 »
- 用mfc向导生成一个工程后,是不是要首先build all一次,以便生成预编译头文件?
- 如何读出并播放数据库中的wav文件?
- 急问有没有人在windows下编成功过ethereal????
- usbkey替换windows登录界面
- 动态链接库中处理图形显示
- 怎么从一个无限循环里面跳不出来啊???
- vc++ 如何区分是本地键盘输入 还是 远程控制或远程桌面的键盘输入
- 如何显示大数据量 BMP 文件? 谢谢了
- 能不能谈谈编译和运行呢?
- 大家谈谈平时编代码的一些好的方法和不好的习惯,互相交流一下经验(主要是代码编写的规范化,包括函数,变量的命名则,注释的方法等)
- 结构体编译出错 ?
- CFtpFileFind无法查找包含空格的路径?
注意另一端的代码,例如:
//CONNECT
CONNECT = ConnectSock();
if (!CONNECT)
MessageBox(0,"connect err",
"err",MB_OK|MB_APPLMODAL); //Accept Flag
recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);
if (Flag == US_FLAG)
{
//Send MouseMove
send(ServerSock,(char*)&Msg,sizeof(Msg)+1,MSG_OOB);
}
你的代码每一次动作的发生都会建立一次连接,然后发送数据,这个US_FLAG在两端都有定义:
#define US_FLAG 9999
这个特殊的数值,当你的Client(SockServer)接收到他时,证明Server(SockClient)连接成功,并做好了数据收发的准备了。接下来Client会发送一个Msg,指明要Server做什么操作,Server端
//Get Message
length = recv(NewSock,(char*)&iMsg,sizeof(iMsg)+1,0);
对Msg进行判断,不同的Msg做不同的处理,这就是GetData的用途。