網路程式設計 基於UDP的網路化CPU效能檢測

2022-07-16 15:48:12 字數 4608 閱讀 7552

網路化計算機效能檢測軟體的開發,可對指定目標主機的cpu利用率進行遠端檢測,並自動對遠端主機執行效能指標進行週期性檢測,最終實現圖形化顯示檢測結果。

網路通訊模組:(客戶端類似,因為udp是對等通訊)

啟動伺服器:建立套接字並註冊網路事件

void

cremotecpuimitatedlg::onbnclickedok()

;

int clientaddrsize = sizeof

(clientaddress);

getdlgitem(idok)->enablewindow(false);

memset(bufferdata,

0, sizeof

(bufferdata));

serveraddress.sin_port = htons(4440

); serveraddress.sin_family =af_inet;

serveraddress.sin_addr.s_addr = inaddr_any; //

初始化本地網絡卡

m_serversocket = wsasocket(af_inet, sock_dgram, 0, null, 0, 0

);

if (m_serversocket ==socket_error)

int result = bind(m_serversocket, (sockaddr*)&serveraddress, sizeof

(serveraddress));

if (result != 0

)

if(wsaasyncselect(m_serversocket, m_hwnd, um_recv, fd_all_events))

} 網路事件響應函式

afx_msg lresult cremotecpuimitatedlg::onumrecv(wparam wparam, lparam lparam)

else

break

;

case fd_read://

可讀,接收資料。

else

}//主機名稱

strpcname = li->pcname;

switch (li->osverinfoex.dwplatformid)

//cpu

strcpu.format(l"

%dmhz

", li->cpumhz);

//網速

strping.format(l"

%d", li->speed);

addlist(strip, strpcname, stros, strcpu, strping);

break

; }

case

2://

cpu資訊

dlg->m_sumcpu =sumcpu;

wparam a;

a =sumcpu;

::postmessage(dlg->getsafehwnd(), um_change, a, 0

);

break

; }

case

3://

下線

}break

; }

default

:

break

; }

}//在新接受的套接字發生fd_read,fd_write,fd_close網路事件發生,傳送wm_socket訊息;

//wsaasyncselect(saccept, this->m_hwnd, um_recv, fd_read | fd_write | fd_close);

}

break

;

case fd_write://

可寫,傳送資料。

break

;

case fd_close://

對方關閉套接字連線。

else

if (wsagetselecterror(lparam) ==wsaeconnrefused)

}break

;

default

:

break

; }

}return0;

}

繪製cpu使用率進度條

uint cdisplaydlg::dosyscpu(lpvoid pparam)

else

sumcpu = sumcpu % 101

; pthis->m_process_cpu.setpos(sumcpu);

showcpu.format(l

"%u %%

", sumcpu);

pthis->getdlgitem(idc_static_cpu)->setwindowtext(showcpu);

pthis->updatewindow();

pthis->invalidate(false);

::postmessage(pthis->getsafehwnd(), wm_paint, 0, 0

);

return0;

}4.5

繪製cpu使用記錄折線

bool cdisplaydlg::cdrawcpu(cdc *pdc)

cpen *poldpen = dcmem.selectobject(&pen);//

儲存舊畫筆

//橫線

for (i = 1; i < 10; i++)

//豎線

for (i = 1; i < 30; i++)

//收回資源並釋放

dcmem.selectobject(poldpen);

pen.deleteobject();

//繪製四邊(防止閃爍)

dcmem.moveto(

0, 0

); dcmem.lineto(rect.width(), 0);

dcmem.moveto(

0, rect.height() - 1

); dcmem.lineto(rect.width(), rect.height() - 1

); dcmem.moveto(

0, 0

); dcmem.lineto(

0, rect.height());

dcmem.moveto(rect.width() - 1, 0

); dcmem.lineto(rect.width() - 1

, rect.height());

//繪製cpu執行狀態線

if (!pen.createpen(0, 2, rgb(0, 200, 0

)))

poldpen = dcmem.selectobject(&pen);//

儲存舊畫筆

pointcpu[

0].x =rect.width();

pointcpu[

0].y = rect.height() - rect.height()*m_sumcpu / 100

;

for (i = m_nmovnum; i > 0; i--)

pointcpu[i].x = pointcpu[i - 1].x - rect.width() / maxpix - 1

; pointcpu[i].y = pointcpu[i - 1

].y;

}dcmem.selectobject(poldpen);

pen.deleteobject();

poldpen =null;

//將記憶體dc上的圖象拷貝到前台

pdc->bitblt(0, 0

, rect.width(), rect.height(),

&dcmem, 0, 0

, srccopy);

//釋放資源

dcmem.selectobject(oldbmp);

dcmem.deletedc();

//刪除dc

bmp.deleteobject(); //

刪除位圖

return

true;

}

執行效果:

附件:原始碼(客戶端和伺服器)

基於UDP的網路程式設計步驟

基於udp 伺服器端 1.建立乙個socket,用函式socket 2.繫結ip位址 埠資訊等到socket上,用函式bind 3.迴圈接收資料,用函式recvfrom 4.關閉網路連線 include include include include include include include ...

基於Udp的Socket網路程式設計

1.新建乙個工作空間 udp 新增兩個工程udpclient 和 udpsrv 2.在工程udpsrv中新增udpsrv.cpp檔案 如下 include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1...

基於UDP的socket網路程式設計

udp的網路程式設計模型較tcp簡單一些,因為udp的特點與tcp的不一樣,tcp是面向連線的,udp是無連線的。udp的服務端程式設計可總結為以下幾個步驟 1.使用socket建立通訊描述符 int socket int domain,int type,int protocol type引數應選擇...