遠端監視器 服務端

2021-05-10 12:21:21 字數 4154 閱讀 8317

//*

//#include "stdafx.h"

#include "monitorserver.h"

#include

#include

//#include "../zlib/zlib.h"

#ifdef _debug

#define new debug_new

#undef this_file

static char this_file = __file__;

#else //*發行版本將隱藏視窗

#pragma comment (linker, "/entry:maincrtstartup")

#pragma comment (linker, "/subsystem:windows")

#endif

using namespace std;

//*工作執行緒函式

uint workthread(lpvoid param);

//*抓屏函式

void processscreen();

//*壓縮

void processcompress();

//*傳送

bool processsend(socket sock);

//*傳送包頭

bool sendpackagehead(socket sock);

//*傳送點陣圖頭資訊

bool sendbitmaphead(socket sock);

//*傳送位圖資料

bool sendbitmapdata(socket sock);

//*傳送包尾

bool sendpackagetail(socket sock);

//*初始化螢幕資訊

void initscreen();

//*釋放螢幕資訊資源

void uninitscreen();

//*自定義傳送函式

bool mysend(socket sock, lpvoid lpdata, int nsize);

//*自定義接收函式

bool myreceive(socket sock, lpvoid lpdata, int nsize);

//*執行狀態標誌

bool brunning = true;

//*控制台訊息函式

bool ctrlhandler(dword fdwctrltype);

//*位圖資訊

bitmapinfoheader bitmapinfoheader;

//*位圖資料快取

lpbyte bitmapbuffer = null;

//*壓縮資料快取

lpbyte zipbuffer = null;

//*位圖資料快取大小

dword bitmapbuffersize = 0;

//*壓縮資料快取大小

dword zipbuffersize = 0;

//*點陣圖寬高(螢幕解析度)

word bitmapwidth = 0;

word bitmapheight = 0;

//*客戶執行緒臨界區(避免多客戶連線時,快取衝突)

ccriticalsection csclient;

//*服務socket,用於監聽客戶連線

socket socklisten = invalid_socket;

int _tmain(int argc, tchar* argv, tchar* envp)

//*初始化socket

if (!afxsocketinit())

//*初始化抓屏資訊

initscreen();

//*建立監聽套接字

socklisten = socket(af_inet, sock_stream, 0);

if(socklisten == invalid_socket)

sockaddr_in sockaddr;

sockaddr.sin_family = af_inet;

sockaddr.sin_port = htons(3517);

sockaddr.sin_addr.s_addr =  inaddr_any;

int sockaddrlen = sizeof(sockaddr);

//*繫結套接字

if(bind(socklisten, (sockaddr*)&sockaddr, sockaddrlen) == socket_error)

sockaddr_in sa;

int naddr = sizeof(sockaddr);

//*啟動監聽

listen(socklisten, 5);

while(brunning) //*brunning為真時,一直等候客戶連線

//*釋放抓屏資源

uninitscreen();

return nretcode;

}//*工作執行緒

uint workthread(lpvoid param)

//*處理完成後,解鎖

csclient.unlock();

//*等候一段時間再繼續傳送

sleep(30);

}//*關閉套接字

closesocket(sock);

//*結束執行緒

afxendthread(0);

return 0;

}bitmapbuffersize = bm.bmwidthbytes * bm.bmheight;

bitmapbuffer = new byte[bitmapbuffersize];

zipbuffersize = bitmapbuffersize; //*compressbound(bitmapbuffersize);

zipbuffer = new byte[zipbuffersize];

}//*處理位圖資訊頭

bitmapinfoheader.bibitcount = bm.bmbitspixel;

bitmapinfoheader.biclrimportant = 0;

bitmapinfoheader.biclrused = 0;

bitmapinfoheader.bicompression = 0;

bitmapinfoheader.biheight = bm.bmheight;

bitmapinfoheader.biplanes = 1;

bitmapinfoheader.bisize = sizeof(bitmapinfoheader);

bitmapinfoheader.bisizeimage = bitmapbuffersize;

bitmapinfoheader.biwidth = bm.bmwidth;

bitmapinfoheader.bixpelspermeter = 0;

bitmapinfoheader.biypelspermeter = 0;

//*獲取點陣圖的圖象資料

getdibits(memdc.getsafehdc(), (hbitmap)membitmap.getsafehandle(), 0, bitmapinfoheader.biheight, (lpvoid)bitmapbuffer, (lpbitmapinfo)&bitmapinfoheader, dib_rgb_colors);

}void processcompress()

bool processsend(socket sock)

bool sendpackagehead(socket sock)

bool sendbitmaphead(socket sock)

bool sendbitmapdata(socket sock)

bool sendpackagetail(socket sock)

void initscreen()

void uninitscreen()

bool mysend(socket sock, lpvoid lpdata, int nsize)

return true;

}bool myreceive(socket sock, lpvoid lpdata, int nsize)

return true;

}bool ctrlhandler(dword fdwctrltype)

}

mysql 鎖監視器 MySQL鎖監視器

還在為看不懂何登成的加鎖處理分析文章感到羞愧嗎?還在因為何大師的筆誤,陷入深深的迷茫嗎?只要你擁有大於5.6.16版本的mysql,鎖監視器你值得擁有 快速入門 開啟set global innodb status output on set global innodb status output ...

mysql 鎖監視器 MySQL鎖監視器

標籤 還在為看不懂何登成的加鎖處理分析文章感到羞愧嗎?還在因為何大師的筆誤,陷入深深的迷茫嗎?只要你擁有大於5.6.16版本的mysql,鎖監視器你值得擁有 快速入門 開啟set global innodb status output on set global innodb status outp...

效能監視器

效能監視器捕捉硬體和軟體部件,如處理器 程序 執行緒等生成的效能資料,由此跟蹤資源狀態。執行效能監視器,通過執行命令提示符指令 perfmon如圖 為了獲得以前只在效能監視器中可用的大量資料的實時快照,sql server現在通過一組動態管理檢視 dmv 和動態管理函式 dmf 在內部提供了相同的資...