㈠ 如何使用java實現tcp的p2p的打洞技術
建立穿越NAT設備的p2p的TCP連接只比UDP復雜一點點,TCP協議的"打洞"從協議層來看是與UDP的"打洞"過程非常相似的。盡管如此,基於TCP協議的打洞至今為止還沒有被很好的理解,這也造成了對其提供支持的NAT設備不是很多。在NAT設備支持的前提下,基於TCP的"打洞"技術實際上與基於UDP的"打洞"技術一樣快捷、可靠。實際上,只要NAT設備支持的話,基於TCP的p2p技術的健壯性將比基於UDP的技術的更強一些,因為TCP協議的狀態機給出了一種標準的方法來精確的獲取某個TCP session的生命期,而UDP協議則無法做到這一點。
一. 套接字和TCP埠的重用
實現基於TCP協議的p2p"打洞"過程中,最主要的問題不是來自於TCP協議,而是來自於來自於應用程序的API介面。這是由於標準的伯克利(Berkeley)套接字的API是圍繞著構建客戶端/伺服器程序而設計的,API允許TCP流套接字通過調用connect()函數來建立向外的連接,或者通過listen()和accept函數接受來自外部的連接,但是,API不提供類似UDP那樣的,同一個埠既可以向外連接,又能夠接受來自外部的連接。而且更糟的是,TCP的套接字通常僅允許建立1對1的響應,即應用程序在將一個套接字綁定到本地的一個埠以後,任何試圖將第二個套接字綁定到該埠的操作都會失敗。
為了讓TCP"打洞"能夠順利工作,我們需要使用一個本地的TCP埠來監聽來自外部的TCP連接,同時建立多個向外的TCP連接。幸運的是,所有的主流操作系統都能夠支持特殊的TCP套接字參數,通常叫做"SO_REUSEADDR",該參數允許應用程序將多個套接字綁定到本地的一個endpoint(只要所有要綁定的套接字都設置了SO_REUSEADDR參數即可)。BSD系統引入了SO_REUSEPORT參數,該參數用於區分埠重用還是地址重用,在這樣的系統裡面,上述所有的參數必須都設置才行。
㈡ 初學JAVA的問題
《java2 核心技術》卷 I,II, 卷I是基礎部分(包括java 基本語法,面向對象,IO流與文件,圖形界面,applet, 異常處理,范型設計),卷II是高級部分(多線程,集合,網路,JDBC,分布式對象,高級圖形特性,JavaBean,安全,XML。。。)高手們說看完這兩本書,就可以看《Thinking in java》了,之後就可以去學J2EE了
PS: 其實學完基本語法,I/O,異常,集合,JDBC(當然也要看看資料庫Oracle 或MySql, Sql server之類的)後就可以開始學J2EE了:JSP ,servlet, JavaScript(跟JAVA沒關系的一種腳本語言,用於B/S架構網路前台處理數據),structs 等。。。對於JFC中的SWING圖形編程,如果覺得麻煩就跳過吧,畢竟桌面級開發不是JAVA的強項,非常麻煩。。。(寫一個什麼都沒有的對話框就佔去了14M內存,那還有啥好說的。。。)
另外,《JAVA編程思想》(《Thinking in JAVA》的中文翻譯版)建議在看完核心技術I以後再看,對初學者而言,《JAVA編程思想》並不見得是本好書,但是對於有一定JAVA基礎的人來說,這本書就是一本好書
還有就是多練習,初學者建議使用記事本編輯程序,在控制台下使用javac編譯程序, java運行程序(這對你理解環境變數有幫助),之後你可以使用eclipse進行JAVA編程,需要說一點的是eclipse非常方便,它的快捷鍵堪稱一絕,不過對初學者不好,會慣壞你的,學完面向對象特性以後再使用(常用快捷鍵alt + /)。
書上的代碼很多,最好都敲一遍,對著書理解,其實你會發現,JAVA並不難(僅限與J2SE,因為本人剛開始學J2EE,還不是很了解J2EE。。。)
㈢ 如何使用java實現tcp的p2p的打洞技術
公網設伺服器S, 2p點(P1.P2) 連S,過S雙方獲取對方公網IP.
P1 P2都向對方的(公網IP+任意埠)發起連接,當然無任何回應,但是會發生2件事
1 P1 P2都在自己的外網NAT上打了個連接對方的洞,這個洞會保持一會兒.
2 連接的時候S抓取到P1 P2 的NAT埠,然後將此埠發送給對方,
然後就可以想辦法連接了.
㈣ java能不能實現P2P下載平台
可以的,看這個文章:
http://bbs.itren.cn/html/bbs8593.html
還有這個:
http://jwebee.javaeye.com/blog/157048
㈤ Java Socket 實現P2P
主動發起的會話的可以看成Client用socket、、被動接受的看成Server用ServerSocket、、、按你的做法、絕斗、A既有socket還有ServerSocket、、、socket用來主動連接其他客戶端、、、ServerSocket用於虛宏亮監聽其他客戶端是否發來連接請求差寬
㈥ JAVA版p2p網貸系統源碼哪家比較好
對比過,覺得迪蒙網貸系鉛信臘統還不錯,提供JAVA源碼。
主要開發工具:
Eclipse:坦轎開源、功能強大、使用廣泛、插件多,易用槐滑。
IntelliJ:號稱最智能的Java開發工具,不開源,要花錢買License,不過有破解版。
然後迪蒙網貸系統java版的優勢也多:
1、Java通過JDBC來訪問資料庫,介面比較統一。
2、java跨平台性比較好;
3、開發成本方面相對低;
4、代碼安全等等。
㈦ 廣域網實現p2p文件傳輸 如何實現nat穿透 求java或C++源代碼
假設有兩台分別處於各自的私有網路中的主機:A和B;N1和N2是兩個NAT設備;S是一個使用了一個眾所周知的、從全球任何地方都能訪問得到的IP地址的公共伺服器
步驟一:A和B分別和S建立UDP連接;NAT設備N1和N2創建UDP轉換狀態並分配臨時的外部埠號
步驟二:S將這些埠號傳回A和B
步驟三:A和B通過轉換好的埠直接聯繫到對方的NAT設備;NAT設備則利用先前創建的轉換狀態將分組發往A和B
源碼已發送請查收