Visual C++实现对计算机远程监控
2008-11-14 19:33:26 来源:WEB开发网相比而言,客户端程序的网络通讯部分的实现较为简单,只需创建socket套接字端口,并用connect()同服务器建立起连接后就可以用recv()和send()同服务器收发数据了。
初始化Socket端口部分同服务器的实现部分类似,
……
wVersionrequested = MAKEWORD(2,0);
//启动套接字
WSAStartup(wVersionrequested,&wsaData);
……
SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);
在此,通过设置定时器来及时地把远程计算机的当前屏幕以位图数据的形式传到客户端,并显示在屏幕上,使维护人员能及时了解到远程计算机的工作状态。首先要用connect()先建立一个到对等端(peer)的联接。connect()函数主要用于创建到指定的外部关联的联接。如果 socket 尚未绑扎(unbound),则由系统为本地关联指定一个唯一值。注意如果名字结构的地址域(the address field of the name structure)为全 0,connect()将返回错误 WSAEADDRNOTAVAIL。
对流式 sockets (SOCK_STREAM 类),将启动一个到使用名字(该 socket 名字空间的一个地址)的外部主机的活动联接。当调用成功完成时,该 socket 已准备好发送/接收数据。下面是定时器消息响应函数的部分主要代码:
……
clientSock = socket(AF_INET,SOCK_STREAM,0);
if (clientSock < 0)
return FALSE;
//建立连接
client.sin_family = PF_INET;
client.sin_port = htons(7016);
client.sin_addr.s_addr = inet_addr(client_address);
……
msgsock = connect(clientSock,(struct sockaddr*)&client,sizeof(client));
if (msgsock!=0)
return FALSE;
……
//获取屏幕尺寸
GetWindowRect(hWnd,&rect);
BitWidth = rect.right - rect.left;
BitHeight = rect.bottom - rect.top;
recv(clientSock,(char*)&Flag,sizeof(Flag)+1,0);
if (Flag == US_FLAG)
{
MouseEventFlag = false;
//发送消息
Msg = US_DESKTOPBIT;
send(clientSock,(char*)&Msg,sizeof(Msg)+1,MSG_OOB);
//Send Bit Height and Weidth
send(clientSock,(char*)&BitWidth,sizeof(BitWidth)+1,MSG_OOB);
send(clientSock,(char*)&BitHeight,sizeof(BitHeight)+1,MSG_OOB);
//接收数据
GetDesktopBit(hWnd);
MouseEventFlag = true;
}
//关闭套接字,释放数据
closesocket(clientSock);
更多精彩
赞助商链接