基於.NET平台和C#語言實現TCP NAT穿越
       1.《C# WinForm 跨線程訪問控件(實用簡潔寫法)》
       2.《基於.NET環境,C#語言 實現 TCP NAT》
       3.《基於Tcp穿越的Windows遠程桌面(遠程桌面管理工具)》
宗旨:
雖然已經實現基於.NET平台和C#語言實現TCP NAT穿越,但本文並不免費提供相關源代碼及實現。本文旨在向那些正在努力實現穿越的開發者們,分享我在整個開發過程中的失敗教訓以及成功經驗。整個開發過程歷時數周,期間的各種苦楚和酸甜苦辣自知,與仍在努力道路上的開發者們共勉!以下分享我的開發過程。
文章參考:
互聯網上關於TCP NAT穿越原理性的文章很多,真正能夠提供源代碼的文章卻不多。在諸多提供源代碼的文章中,不乏很多濫竽充數的文章和轉發。本以為CodeProject上會有相關的介紹及開源代碼,不過遺憾的是並沒有。不過幸運的是,UDP穿越的文章及代碼實現,網上很多是可用的(親測可用),而且原理性的文章寫得面面具到。不管原創的也好,轉發的也罷,親測可用,我想是沒錯的,可借鑒的。而且堅信TCP NAT穿越,應該與UDP穿越原理一樣。期間參閱了大量文章,把TCP及UDP穿越的細節掌握得一清二楚。
在我參閱的很多UDP穿越的文章結尾處都會提及一句,TCP穿越同理! 但不知為何關於成功實現TCP穿越的文章卻寥寥無幾,顯得形單影只,冷冷清清。不過期間確實參閱到有用C++及VB成功實現的,也仔細拜讀了文章,結果在我自己的實踐道路上,並沒有幫助。期間也碰到很多相關求助貼,按網上的原理編寫代碼,最終卻無緣成功,不知道問題究竟何在。
代碼編寫:
其實代碼編寫並無什么可說的,無非完全按照理論性文章編寫測試代碼,寥寥數行代碼即可實現,不過測試結果比代碼行數還要悲哀,歷經修改,始終無法實現穿越,期間返回多次仔細拜讀文章,卻始終無緣成功,最終的結局如同那些發求助帖的作者一樣。轉而向大神求助,但最終都沒能成功。
峰回路轉:
停滯不前的狀態持續一段時間后,看不到轉機,非常沮喪,原理及實現都沒有問題,卻始終不能成功,就開始懷疑參考文章的問題,畢竟人家也沒實現,只是理論性的。開始轉向國外英文文檔,以為是方向性問題。參閱大量英文資料后,發現內容累同,基本與國內論壇上文章一致。幾近放棄的時候,在一篇國外文獻(RFC)找到關鍵點,轉機出現,簡單修改代碼,立馬成功。
總 結:
目前互聯網上關於TCP NAT穿越的文檔很多,實現很少,成功者更是寥寥無幾,存在最大的問題,這些參考文章中的實踐方法是針對Unix平台而非Window平台的,顯然基於Windows平台按網上的實踐流程,顯然不能成功。而國外的文獻中,內容基本與國內雷同(包括原理及實踐),僅用一句話說明了Window平台和Unix平台的區別,最終導致很多開發者最終失敗。
關鍵點介紹:
在大家的印象中,想要成功建立P2P連接,必須監聽端監聽,連接端發起連接,才會成功。各種文獻中也是這么介紹的,所以才會出現采用端口復用,一邊向對等端連接,一邊監聽。如果你一直停留在要監聽才能建立連接,你始終無緣P2P TCP NAT穿越。
附 言:
應用 P2P技術到商業項目,除了成功建立P2P TCP NAT穿越連接外,連接速度也至關重要。另外由於一些網絡環境因素,某些網絡環境天生不支持P2P TCP NAT穿越。這就需要建立中繼服務器,牽涉到IOCP技術,反向連接技及中間件等技術。另有嘗提供全套技術及源碼。
主要研發方向:Tcp,TcpNat,服務前端,反向連接,大規范並發技術
QQ交流群:697622527 歡迎交流
