C++ 远程监控

1.下载EasyX 库

2.客户端

#include <iostream>
#include <easyx.h>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
struct FDataHeader
{
    int type;
    int palyload_size;
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    //程序是否已经启动
    HANDLE h = CreateMutex(NULL, TRUE, L"moniterClient");
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        CloseHandle(h);
        return FALSE;
    }
    WSADATA  wasData;
    WSAStartup(MAKEWORD(2, 2), &wasData);
    SOCKET client_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (INVALID_SOCKET == client_socket)
    {
        return -1;
    }
    sockaddr_in target;
    target.sin_family = AF_INET;
    target.sin_port = htons(9999);
    target.sin_addr.S_un.S_addr = inet_addr("192.168.10.5");
    connect(client_socket, (sockaddr*)&target, sizeof(target));

    HDC dDesktopDC = GetWindowDC(GetDesktopWindow());

    int DesktopW = GetDeviceCaps(dDesktopDC, DESKTOPHORZRES);
    int DesktopH = GetDeviceCaps(dDesktopDC, DESKTOPVERTRES);

    IMAGE DesktopImage(DesktopW, DesktopH);
    HDC hDeskTopImage = GetImageHDC(&DesktopImage);
    while (true)
    {
        BitBlt(hDeskTopImage, 0, 0, DesktopW, DesktopH, dDesktopDC,0,0,SRCCOPY);
        saveimage(TEXT("0.jpg"), &DesktopImage);
        FDataHeader header;
        header.type = 1;

        FILE* fp = fopen("0.jpg", "rb");
        if (fp == nullptr) continue;
        fseek(fp, 0, SEEK_END);
        header.palyload_size = ftell(fp);
        fseek(fp, 0, SEEK_SET);
        ::send(client_socket, (char*)&header, sizeof(FDataHeader), 0);

        char buffer[1024] = { 0 };
        while (true)
        {
            int ret = fread(buffer, 1, 1024, fp);
            if (ret <= 0) break;
            ::send(client_socket, buffer, ret, 0);
        }
        fclose(fp);
    }
    return 0;
}

3.服务端

#include <iostream>
#include <easyx.h>
#include <wchar.h>
#include <WinSock2.h>
#include <thread>
#pragma comment(lib,"ws2_32.lib")

struct FDataHeader
{
	int type;
	int palyload_size;
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//程序是否已经启动
    HANDLE h = CreateMutex(NULL,TRUE, L"moniterServer");
    if(GetLastError()==ERROR_ALREADY_EXISTS)
    {
        CloseHandle(h);
        return FALSE;
    }

	WSADATA  wasData;
	WSAStartup(MAKEWORD(2, 2), &wasData);

	HWND hwnd = initgraph(1024, 768);
	SetWindowLongPtr(hwnd, GWL_STYLE, GetWindowLongPtr(hwnd, GWL_STYLE) & ~WS_OVERLAPPEDWINDOW);
	SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
	SOCKET listen_socket = socket(AF_INET, SOCK_STREAM, 0);
	if (INVALID_SOCKET == listen_socket)
	{
		return -1;
	}
	sockaddr_in loacl;
	loacl.sin_family = AF_INET;
	loacl.sin_port = htons(9999);
	loacl.sin_addr.S_un.S_addr = INADDR_ANY;
	if (SOCKET_ERROR == bind(listen_socket, (sockaddr*)&loacl, sizeof(sockaddr_in)))
	{
		return -1;
	}
	if (SOCKET_ERROR == listen(listen_socket, 10))
	{
		return -1;
	}
	while(true)
	{
		SOCKET client_socket = accept(listen_socket, nullptr, nullptr);
		SetWindowText(GetHWnd(), TEXT("开始运行"));
		while (true)
		{
			FDataHeader header;
			int ret = recv(client_socket, (char*)&header, sizeof(FDataHeader), 0);
			if (ret <= 0) break;
			if (header.type == 0)
			{

			}
			else if (header.type == 1)
			{

				int residue_length = 0;
				FILE* fp = fopen("1.jpg", "wb");
				char buff[1024] = { 0 };
				residue_length = header.palyload_size;
				while (residue_length > 0)
				{
					ret = recv(client_socket, buff, residue_length > 1024 ? 1024 : residue_length, 0);
					if (ret <= 0)
					{
						fclose(fp);
						goto end;
					}
					fwrite(buff, 1, ret, fp);
					residue_length -= ret;
				}
				fclose(fp);
				IMAGE image;
				//void loadimage(IMAGE * pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false);					// Load image from a file (bmp/gif/jpg/png/tif/emf/wmf/ico)

				loadimage(&image, _T("1.jpg"), 1280., 720);
				putimage(0, 0, &image);
			}
		}
	end:
		closesocket(client_socket);
		cleardevice();

	}
	return 0;
}

相关推荐

  1. C++ 远程监控

    2024-04-14 15:22:01       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 15:22:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 15:22:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 15:22:01       87 阅读
  4. Python语言-面向对象

    2024-04-14 15:22:01       96 阅读

热门阅读

  1. 无人机光伏电站巡检:技术革新与未来趋势

    2024-04-14 15:22:01       48 阅读
  2. Kotlin - 时间 Duration

    2024-04-14 15:22:01       46 阅读
  3. 使用自动化脚本获取多多买菜数据

    2024-04-14 15:22:01       159 阅读
  4. c#使用OleDb库更改Access数据库的密码

    2024-04-14 15:22:01       40 阅读
  5. BOM事件的重点——之转生在异世界学前端

    2024-04-14 15:22:01       36 阅读
  6. 若依 ruoyi-vue 维护Ancestors字段 树转换成List

    2024-04-14 15:22:01       39 阅读