.Net開發筆記(十五) 基於“泵”的TCP通訊(接上篇)


上一篇博客中說了基於“泵”的UDP通訊,附上了一個Demo,模擬飛鴿傳書的功能,功能不太完善,主要是為了說明“泵”在編程中的應用。本篇文章我再附上一個關於TCP通訊的兩個Demo,也都采用了“泵”模式:

1.由於我把通訊部分的代碼寫在了一個dll中,這個demo只是簡單的應用這個dll,主要完成發送字符串、字節流、可序列化對象等功能,效果圖如下:

圖1 服務端

圖2 客戶端

2. 一個簡單的屏幕監控程序,主要有屏幕監控、鍵盤鼠標監控、鍵盤鼠標控制等功能。監控服務端可以同時監控多個客戶端,效果圖如下:

圖3 服務端監控界面

這個demo稍微復雜一點,各功能實現如下:

  • Windows Hook編程,主要使用了WH_MOUSE_LL和WH_KEYBOARD_LL兩種低級鈎子,所以鈎子回調方法直接寫在了同一個程序中,沒有單獨寫在一個dll中。使用這兩種鈎子主要是監控客戶端的鼠標和鍵盤信息;
  • 屏幕監控直接截屏發送到服務端,沒有使用任何算法,效率不高但可以看,畢竟這個不是重點;
  • 由於要遠程操作鼠標和鍵盤,客戶端使用了mouse_event 和 keybd_event兩個win32 API,模擬鼠標個鍵盤輸入。

雙擊監控屏幕控制遠程主機屏幕。

再說一下通訊部分的原理,其實它跟UDP中的結構差不多,不同的是UDP中是一對一的,“泵”結構只有一個,借用上一篇博客中的插圖:

圖4 泵結構

TCP中的客戶端跟上圖差不多,服務端就稍微有點不同,因為它需要接收多個客戶端的數據,因此“數據接收泵”、“數據分析泵”都有多個,每一個都跟上圖類似。

本TCP通訊庫沒有做心跳檢測處理,因此在斷網和斷電等情況下,不會激發相應事件通知你掉線。該功能需要你自己實現,比如每隔一定時間給雙方發送一個信息。

源碼共有4個項目:

  • TCPCommunication:通訊庫
  • TCPCommunicationDemoServer:demo1的服務端
  • TCPCommunicationDemoClient:demo1的客戶端
  • RemoteDeskServer:demo2的服務端
  • RemoteDeskClient:demo2的客戶端

第二個Demo性能有待優化(可以將鈎子部分代碼注釋掉,不再監控客戶主機的鍵盤鼠標輸入)。VS2008 Win7編譯通過,源碼下載地址:http://files.cnblogs.com/xiaozhi_5638/TCPCommunication_Source.rar

希望對各位有幫助,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM