Visual C++实现对计算机远程监控
2008-11-14 19:33:26 来源:WEB开发网接下来需要调用accept()来接收连接。客户在建立套接字后就可调用connect()和服务器建立连接。其函数原形为:SOCKET PASCAL FAR accept ( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen );该例程从在 s 上挂起的联接队列中取出第一个联接,用和 s 相同的特性创建一个新的 socket 并返回新 socket 的句柄。如果队列中没有挂起的联接,并且 socket 也未标明是非阻塞的,则 accept() 阻塞调用者直到有一个联接。已经接受联接的 socket (accepted socket)不应用于接受更多的联接。参数 addr 是一个返回参数,填入的是通信层的联接实体地址。地址参数 addr 的严格格式由进行通信的地址族确定。addrlen 是一个返回参数值;该值在调用前包含 addr 指向的缓冲区空间长度;调用返回时包含返回地址的实际长度。
//ACCEPT
int len = sizeof(dstserver_addr);
NewSock = accept(ServerSock,(struct sockaddr far *)&dstserver_addr,&len);
if (NewSock < 0)
{
closesocket(ServerSock);
return FALSE;
}
//获取屏幕大小
SysWidth = GetSystemMetrics(SM_CXSCREEN);
SysHeight = GetSystemMetrics(SM_CYSCREEN);
……
连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。最后,待数据传送结束后,调用close()关闭套接字。下面的函数就负责将当前的屏幕状态,以数据的形式通过send函数发送给客户程序,以实现对远程服务器端的计算机的远程监视:
……
//Send Falg
FALG = US_FLAG;
send(NewSock,(char*)&FALG,sizeof(FALG)+1,MSG_OOB);
//Get Message
length = recv(NewSock,(char*)&iMsg,sizeof(iMsg)+1,0);
if (length < 0)
{
//Close Sock
closesocket(NewSock);
closesocket(ServerSock);
return FALSE;
}
//GetMessageData
if (iMsg < 4500)
{
send(NewSock,(char*)&SysWidth,sizeof(SysWidth)+1,MSG_OOB);
send(NewSock,(char*)&SysHeight,sizeof(SysHeight)+1,MSG_OOB);
}
switch(iMsg)
{
case US_DESKTOPBIT: //发送当前屏幕图像
SendDesktop();
break;
……
}
更多精彩
赞助商链接