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;
}