網路化計算機效能檢測軟體的開發,可對指定目標主機的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引數應選擇...