導航:首頁 > 編程語言 > p2pjavaudp

p2pjavaudp

發布時間:2022-12-13 06:08:07

㈠ 用java寫了個很簡單的P2P聊天程序,但其中關於TCP\IP、UDP過程有些疑問。

區域網一般不會 丟包的.. 要不你直接tcp發信息
怕丟包 一般都是 三次握手唄 學tcp協議的時候不是講過的唄
http://ke..com/view/1003841.htm 看看唄

㈡ java socket中的IP地址問題

127.0.0.1是表示自己本地IP ,也可以用localhost代替. socket編程也叫套接字編程.java里的socket我沒用過,不過c#的倒看過! 通過tcp/ip連接的程序需要兩個條件,IP和埠,然後通過SOCKET里的方法把他們轉成16進制的套接字.另外是UDP式的,就是後來流行的P2P技術,不需要IP的套接字!

㈢ 如何使用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 學習方法或捷徑--求教

JAVA同其它任何一門編程語言一樣,都是要從淺到深的過程,如果你想愉快的學習這門語言的話,給你看篇文章,記住JAVA學習要有耐心!下面的文章也許對你有幫助
1. Java語言基礎
談到Java語言基礎學習的書籍,大家肯定會推薦Bruce Eckel的《Thinking in Java》。它是一本寫的相當深刻的技術書籍,Java語言基礎部分基本沒有其它任何一本書可以超越它。該書的作者Bruce Eckel在網路上被稱為天才的投機者,作者的《Thinking in C++》在1995年曾獲SoftwareDevelopment Jolt Award最佳書籍大獎,《Thinking in Java》被評為1999年Java World「最愛讀者歡迎圖書」,並且贏得了編輯首選圖書獎。作者從1986年至今,已經發表了超過150篇計算機技術文章,出版了6本書(其中4本是關於C++的),並且在全世界做了數百次演講。他是《Thinking in Java》、《Thinking in C++》、《C++ Inside & Out》《Using C++》和《Thinking in Patterns》的作者,同時還是《Black Belt C++》文集的編輯。他的書被讀者稱為「最好的Java參考書……絕對讓人震驚」;「購買Java參考書最明智的選擇」;「我見過的最棒的編程指南」。作者的非凡才華,極其跨越語言的能力,使作者被選為Java發展10年間與Java關系最密切的10個人物之一。

《Thinking in Java》講述了Java語言的方方面面,很多Java語言的老手都評價「這是一本將Java語言講得相當醜陋的書」。該書談及了java語言的很多細節,每一個方面都是相當深刻的。通過本書你可以看到「醜陋的」java語言。

網路上關於java語言講解的視頻很多很多,其中不凡有垃圾。《翁愷—JAVA語言》可能是你學習java語言基礎的唯一選擇,該講座基本按照《Thinking in Java》這本書講解,其中不凡有翁老師的很多有意思的笑話。我很幸運學習就是從此視頻開始的。內容包括30講,我總共看了3遍。

不過,對於初學者我不太推薦使用《Thinking in Java》,我比較推薦Prentice Hall PTR 的《Core Java 2》國內稱為《Java 2 核心技術》,目前是第七版。網路上大家都可以下載到電子版。Oreilly的《Java in a nutshell》也是一個不錯的選擇。讀完以上兩本後,你可以看看翁愷老師的視頻,接著可以研究《Thinking in Java》了。

2. Java數據結構
市面上關於Java數據結構的書本身就很少很少。大致有APress 的《Java Collections》,Jones 和Bartlett 的《Data Structures in Java》、《Object-oriented Data Structures Using Java》以及Prentice Hall 出版的《Data Structures and Algorithms in Java》 (Dec 19, 2005)還有一本就是《Data Structures And Algorithms With Object-oriented Design Patterns In Java》。很幸運我的第一本英文書就是APress 的《Java Collections》(本書在國內可能根本就沒有中文版――只能下載英文版了),很不錯,講得很有條例、很簡單,是一本完完全全Java Collections API介紹的書籍,其中不凡有擴展API的例子。這是我推薦你學習java數據結構的唯一一本好書。其它的Jones 和Bartlett的那兩本國內好像有一本中文版,想看你也可以看看。

在學習完API後,你可以看看java.util包中對應的類了。不過只有在學習過設計模式後你才有可能完全理解整個Java Collections Framework。Java Collections Framework使用了很多著名的設計模式如:迭代器(Iterator)模式,工廠方法模式、裝飾器模式、適配器模式等等。通過研究java.util包中數據結構的源代碼,你可以知道臭名昭著的Properties類的設計了,同時可能基本具備設計簡單的數據結構的能力了。

所謂學習無止境,學習完Sun提供了Java Collections Framework後,你可以研究Apche的另一個Java Collections Framework,很有意思哦。互為補充的兩個Framework。

在大家學習、研究Java Collections之前,我提示一下Java Collections主要包括以下三部分:介面(Interface)、實現(Implemention)和演算法(Algorithm)。

1. 介面主要有List、Set、Queue和 Map。List 、Se t和Queue是 Collection介面的子介面。

2. 實現主要是實現這些介面的具體類。如實現List介面的ArrayList、LinkedList、Stack和Vector;實現Set介面的HashSet、TreeSet 和LinkedHashSet;實現Queue介面的PriorityQueue、SynchronousQueue等等;實現Map介面的HashMap、TreeMap、Hashtable、Properties、WeakHashMap等等。

3. 演算法主要是由Arrays類和Collections類提供的,它是整個Java Collection Framework演算法的核心。支持各種類型的排序,查找等常用操作。

Java Collections中包含兩個版本的數據結構,主要是原先的支持同步的數據結構和後來不支持同步的數據結構。

Java Collection Framework在使用Comparator和Comparable介面支持排序。同時提供新舊兩個版本的迭代器Iterator和Enumeraton,以及它們如何轉換等等。

在java.util包中的Obserable介面和Observer類是考察者模式的核心。

……

3. Java IO
市面上關於IO的書籍也僅僅只有Oreilly出版社的兩本,都是Elliotte Rusty Harold的著作。兩本書的風格基本一致,推薦閱讀是第一版的《Jvava I/O》,講得比較淺顯,內容相對比較集中,實例也很多。第二版今年5月國外才出版,很有幸我在網路上下載了第二版,講得極其詳細――726頁的大塊頭(我化了兩個星期),這次將NIO和IO和在一起,還包括J2ME部分的,不過串口、並口通信部分好像類庫支持不夠,自己不能實際操作。

與第一版的《Jvava I/O》一起的Oreilly還有一本《Jvava NIO》,也是很不錯的哦。

大家在依次閱讀完《Jvava I/O》以及《Jvava NIO》後,可以研究java.io包中的源代碼了。在大家研究源代碼前我給點提示:

Java的io包主要包括:

1. 兩種流:位元組流(byte Stream)和字元流(character stream),這兩種流不存在所謂的誰代替誰、誰比誰高級之說,它們互為補充,只是側重點不同而已。

2. 兩種對稱:1.位元組流、字元流的對稱;2.輸入、輸出的對稱。

3. 一個橋梁:將位元組流轉變為字元流的InputStreamReader和OutputStreamWriter。

其中必須注意:

1. PipedInputStream和PipedOutputStrem是兩個比較有趣的類。

2. 支持Buffered的流是我們經常使用的類。

3. 裝飾器(Decorator)模式在java最著名的應用就是用於io的設計。仔細研究各個Filter流與具體流的關系,多看設計模式的書籍。相信你會有所所獲。

4. 學習好io包,是研究net包,rmi包……的基礎哦!

4 . Java資料庫
資料庫的書籍太多太多了,也是太爛太爛了!這方面的書我基本都研究過,推薦的你就看看Apress的《JDBC Recipes A Problem Solution Approach 》很不錯,國外2005年底才出版,(國內好像沒有中文版,不過出了中文版也不一定值得看――國內經常將國外的書翻譯得一塌糊塗、不堪入目)不過我們真的很幸運,網路上有電子版的。值得一看。推薦我看的第一本比較滿意的――Wiley出版的《Java Database Bible》,講得很不錯!Sun公司自己的關於JDBC API介紹的那一本《JDBC API Tutorial andRefernece》也不錯。我第二本JDBC的就是研究的這套API。

不過目前這些書都是一些相對比較浮淺的API應用的書籍。有機會我會給大家帶來介紹JDBC API以及JDBC實現內部細節的書!我盡快努力,同時希望得到大家的支持!

順便給學習JDBC的朋友一點提示:

JDBC的學習和使用主要是這套API,其使用過程也是極其簡單,下面是使用JDBC的一般流程:

1. 載入某個資料庫的驅動(Driver類),通常使用Class.forName(「驅動的類名「);

2. 連接資料庫――

Connection con = DriverManager.getConnection(url,username,password);

3. 得到會話――Statement stmt = con.createStatement();

4. 執行操作――Result rs = stmt.executeQuery(「SQL查詢語句」);

5. 處理結果――

while(rs.next()){

String col1 = rs.getString(1);

……

}

簡單吧!整個JDBC中可以變化的一般是:

1. 可以由Connection對象創建Statement、PreparedStatement和CallableStatement創建三種類型的Statement。

2. 可以創建多種類型的ResultSet:支持單向移動和個自由移動;可更新的和不可更新的;支持不同等級的交易的…..

3. 數據輸入的批處理。

4. 結果集中特殊類型(Blob、Clob、Arrary和Ref、Struct)列的操作。

5. 這些特殊類型的錄入資料庫。

6. javax.sql包中特殊結果集(CachedRowSet、JdbcRowSet、WebRowSet)的操作。

7. 其它的就是一個DataSource了,也很簡單!一個J2EE中的被管理對象

簡單吧!相信大家很快就會征服JDBC。

5. Java 網路編程
網路編程――一個神秘的、充滿挑戰的方向。不過在談Java網路編程之前首先感謝Sun公司的開發人員,因為它們天才的設想,充滿智慧的架構,使廣大java程序員學習java網路編程變得異常簡單。

Java網路編程方面的書,我推薦O'Reilly的《Java Network Programming》,目前已經第三版了,以前的版本市面上肯定有!網路上早有第三版的電子版,國外2004年出版,706頁哦!講得很全,比較深入,太深入的可能由於Sun有些東西沒有完全公開,所以也就不好講了,有興趣的可以下載看看!第二本還是O'Reilly 1998年出版的《Java distributed computing 》,基礎部分寫得比較詳細,後面的實例還是值得研究的。

在大家閱讀這些書之前,給大家一點提示:

java網路編程其實相對比較簡單,入門也很快很快。java網路編程主要包括兩個部分:1.Socket;2.URL部分。不過第二部分也完全建立在第一部分的基礎上。

1. Socket包括客戶端的Socket和伺服器端的ServerSocket。還有就是DatagramSocket和DatagramPacket,它對應於UDP通信協議。 總之,Socket部分是建立其它高級協議的基礎。

2. URL類是一個網路資源定位器,通常和具體的網路協議如HTTP,FTP,Telnet……相關。通過該類可以連接網路上的資源,通過其openStream可以以io包中的流(InputStream)的形式讀取網路資源;通過其OpenConnection方法,可以打開一個連接,在此連接上可以不僅可以完成讀的操作,還可以完成寫的操作。

Java的網路編程大體包括以上兩部分。網路編程和IO以及多線程部分非常密切,在學習此部分前大家一定對這兩部分了解比較透徹。

學習了以上部分你可以研究java.net包中的與此相關的源代碼了!研究所有的源代碼還為時尚早。在整個net包中包含:ContentHandlerFactory、URLStreamHandlerFactory、URLStreamHandler、URLClassLoader等輔助類,它們構成了java.net網路編程的框架,通過研究其源代碼,你不僅可以快速理解java.net包,還可以為以後擴展該包打下基礎,甚至可以將此思維方式運用到自己的項目中。

到此為止你對java.net包應該才了解60%,還有一部分你可以使用JDecompiler之類的反編譯軟體打開你JDK安裝目錄下\jdkxxx\jre\lib目錄中的rt.jar,用WinRAR之類的軟體打開它的sun.net包,反編譯所有的文件,它是URL類工作的細節。當研究完該sun.net包,你就會對整個網路編程很熟悉很熟悉了。

一切看起來我們已經對網路編程很精通了。其實不然,剛剛開始而已,要想深入,請繼續吧!網路上很多優秀的網路編程庫甚至軟體可以為我們「添加功力」。如Apache的HttpCore和HTTPConnection 是兩個和HTTP協議相關庫;JGroups是研究分布式通信、群組通信的必讀庫;接著我們可以研究P2P的軟體包,如Sun公司的JXTA,它可能是java平台點對點通信未來的標准哦!接著你可以研究成熟得不得了,使用極其廣泛得P2P軟體Azureus!www.sourceforge.net可以下載到!

千里之行始於足下!Just do it !(目前我也只研究了net包,其它的會在不久的將來繼續深入。Sun公司因為某些原因沒有公開net的其它實現細節,在其允許將其源代碼以文字的形式加以研究,以及允許將其沒有公開的實現寫入書中時,我很希望能出一本java網路編程的書籍,以飧廣大讀者!!)

6. Servlet和JSP
Servlet、JSP的書也是滿地都是!值得推薦的也僅僅兩三本。實推Addison Wiley的《Servlets and JavaServer pages :The J2EE Technology Web Tier》,又是一本很厚的哦!國外2003年出版、784頁,講得比較全,例子也很多,特別是第八章Filter,舉了幾個不錯的例子。其它所有我看到的關於Servlet和JSP的書都沒有如此深入的!(可能有我沒有看到而已)。O』reilly的《Java Servlet Programming》和《Java Server Pages》相對比較好懂一些,可以讀讀!

在大家學習Servlet和Jsp之前我還是要提醒一下:

本質上說Servlet就是一個實現Servlet介面的、部署於伺服器端的伺服器端的程序罷了!它可以象寫其它任何java應用程序一樣編寫,它可以操作資料庫、可以操作本地文件、可以連接本地EJB……編寫Servlet程序的一般流程為:

1. 繼承一個HttpServlet類;

2. 覆蓋其doGet、doPost方法;

3. 在覆蓋方法的內部操作方法參數HttpServletRequest和HttpServletResponse。

4. 讀取請求利用HttpServletRequest。利用HttpServletRequest你可以操作Http協議的協議頭、可以得到請求的操作方法、可以得到請求的路徑、可以得到請求的字元串、以及和請求客戶相關的信息,更主要的你可以得到Cookie和HttpSession這兩個對象。

5. 利用Cookie你可以操作「甜心」對象或者將其寫入HttpServletResponse中。

6. 向客戶輸出信息可以使用HttpServletResponse。使用HttpServletResponse可以寫入各種類型的協議頭、可以增加Cookie、可以重定向其它URL、可以向客戶發送Http協議的狀態碼。

7. 利用HttpSession在會話內完成你想實現的任何功能。

同時Servlet還提供了一些事件和事件監聽器(簡單的觀察者模式而已)。還有就是過濾器(Filter)和包裝器(ServletRequestWrapper、ServletResponseWrapper)――簡單的流的使用和裝飾器模式的使用。

學習Sevlet、JSP必然要部署到伺服器中,記住通常文件部署的步驟和參數的設置以及在程序中如何使用就可以了。

完全理解Servlet後,學習jsp相對比較容易了!Jsp完全建立在Servlet的基礎上,它是為了迎合那些喜歡在Html文檔中嵌入腳本(如:PHP之類的網頁編程語言)的程序員的需要罷了!學起來也相當的容易!

一切看起來似乎那麼的風平浪靜,簡單好學!簡單的表象背後有其復雜的機理。要想對Servlet和Jsp徹底研究,你得研究Tomcat等開源軟體的具體實現。它無非就是一個伺服器,在客戶利用網頁通過HTTP協議向伺服器發送請求後,伺服器將此HTTP請求轉化為相應的HttpServletRequest對象,調用你編寫的Servlet罷了,在你的Servlet中你肯定操作了此HttpServletRequest了吧,同時操作了HttpServletResponse了吧,伺服器就將此HttpServletResponse按照HTTP協議的要求利用HTTP協議發送給你的瀏覽器了!在伺服器端的Jsp網頁在被客戶請求後,Tomcat會利用編譯軟體,使用javax.servlet.jsp包中的模板,編譯此jsp文件,編譯後就是一個Servlet!以後的操作和Servlet完全一樣哦!

在Servlet和Jsp的基礎上出現了,所謂的高級技術:JSTL,Struts……無非就是一些標簽和MVC模式的使用。

繼續前進吧!勝利就在前方!!

7. 多線程
一個看起來很神秘,卻很容易上手、很難精通的方向!

我推薦兩本我感覺很好的書籍。首先是我第一本能上手看的這方面的書,Sams 1998年出版的《Java Thread Programming》,寫得暴好,很容易讀懂,我有空還時常看當時的筆記!要知道怎麼好你自己看吧!第二本OReilly三次出版的《Java Threads》,最新是2004版,國內好像有中文版,推薦你還是看英文版的吧!書中談到了與多線程相關的N個方向,如IO、Swing、Collection等等。

給大家一點提示吧!java類庫中與多線程相關的類不是很多,主要有:Thread、ThreadGroup以及ThreadLocal和InheritableThreadLocal四個類和一個Runnable介面;關鍵字synchronize、volatile ;以及Object對象的wait、notify、notifyAll方法!

1 Thread是多線程的核心類,提供了一系列創建和操作多線程的方法。

2 ThreadGroup是一個管理Thread的工具類。

3 ThreadLocal和InheritableThreadLocal為Thread提供了一個類似保險箱功能的存儲線程對象的類!

4 Runnable不用說了吧!

5 synchronize是同步方法和同步塊的核心哦!多個線程調用此方法時,只有一個線程可以使用此方法,其它方法阻塞,從而保證被操作對象內部狀態完整性。某個線程調用帶有synchronize的方法或塊時會得到該對象的對象鎖,完成塊中的操作後釋放此對象鎖,從而其它對象可以繼續操作。

6 wait、notify、notifyAll提供了有效的等待/通知機制。Java語言中每一個對象都有一個休息室,任何線程在其操作的對象的狀態不滿足的情況下,在該對象的休息室中休息,釋放對象鎖;當其它線程操作該對象後,喚醒休息室中的線程,它們再檢查條件,當條件滿足後,執行相應的操作。

多線程大致就這么多基礎的!簡單嗎!這對於一個真正的程序員應該是不夠的,真正對多線程要有所掌握,請您研究java.util.concurrent包吧!大師Doug Lea的作品,原先是一個開源的一致性編程的庫,後來被Sun公司並入java類庫。作者的網站上也有另外一個版本的該類庫!值得研究的好東西!Hibernation、OpenJMS等開源軟體都使用了此包!

8. 設計模式
談到設計模式很多人多會推薦GOF的那本,該書在Amzon上是五星級的推薦書籍。不過對於學習java沒多久的、特別是java初學者,我很不推薦這本書。主要是該書的例子基本都是C++的,很多細節沒有講述得足夠清楚。

我給大家推薦的第一本是閻宏博士的《Java 與模式》,它是第一本中國人自己寫的關於設計模式的書籍,寫的比較有趣,融合了很多中華民族的文化和觀念,例子、類圖都比較多,且相對簡單!非常不錯的入門書籍――又是大塊頭哦!

其次我推薦Wiley出版社出版的《Pattern In Java》一套三本,我才看了第一本,好像第二本不怎麼樣,第三本還不錯!

第三本是中文翻譯版的關於多線程模式的(很難得的中文翻譯版)中國鐵道出版社2003年出版的《Java多線程設計模式》,將多線程模式講得非常淺顯,配有大量的圖例,每章都有習題,最後有答案!我研究多線程模式就是由它開始的!

第四本,今年出版的Head First系列的《Head First Design Pattern》,秉承Head First系列圖書的優點,大量的類圖、豐富的實例、有趣的註解,值得購買!

其次在J2EE方向你可以研究閱讀Addison Wesley 2002年出版的《Patterns of Enterprise Application Architecture》,眾多大腕的作品,講企業消息集成的!Sun提供的《J2EE PATTERNS SL500》也很好!晚了推薦那一本Amzon 4星半的《Holub on patterns》,大師的作品,提供了,很值得研究的例子,不過對上面四本不是很熟悉的讀者,最好不要讀它!可能會讓你比較累!

我學習設計模式經過一段很曲折的路線,前前後後大約看了20本,閻宏博士的《Java 與模式》我看了4遍,還排除我第一次基本沒看懂的看!記得研一時老師給我們講了GOF的那本,作為選修課,我和它們計算機系的碩士、博士們一起,到最後一個班40-50個人,不超過3個人明白,我也沒有明白任何一點(基礎差吧――主要我對C++語言一點都不了解),憑我不伏輸的性格,我認為我對java語言理解還可以,我就借了《Java 與模式》,結果還是基本沒看懂。很有幸的是讀研三時,聽過了上交大饒若楠老師關於Java OOP語言的講座,我懂了組合書籍模式等三種設計模式後,對其它模式有了強烈的興趣和要征服它的願望!工作後我買的第一本就是《Java 與模式》,第一遍花了2個月研究了這個1000多頁的大塊頭,後來第三遍15天左右就可以搞定,筆記記了一大本!從此一發不可收拾。

選對書、埋頭研究。相信很快就會入門的!

學習Java語言8個簡單的部分,這只是我們研究Java語言的開始!這些都懂了充其量一個java程序員而已,後面的路很長很長!我們可以繼續研究資料庫實現的源代碼、Servlet伺服器的源代碼、RMI、EJB、JNDI、面向方面編程、重構、ANT工具、Eclipse工具、Spring工具、JBoss、JOnAS、Apache Geronimo等J2EE伺服器!研究了這些你可能會成為一個出色的J2EE Architecture!你可以繼續研究剖析器、編譯器、JNODE(java寫的操作系統)……

感謝大家有此耐心,聽我羅羅嗦嗦大半天!感謝大家的閱讀,感謝群里的朋友!這篇文章主要應群里朋友的呼聲――不知道如何選書、不知道從何看起!大半天的功夫完成趕此文章,字句上難免有失誤,同時由於能力有限不凡有錯誤!請閱讀後批評指正!

上面基本是我研究java語言的順序,以上書籍都是我閱讀過的,不存在替任何出版社宣傳的成分!有的方法可能不適合你,假如你能收獲一點,兩點甚至更多,請你不要吝嗇推薦給你的朋友――共同學習!

感謝大家的閱讀;感謝互聯網的設計者;感謝java的設計師;感謝www.open-open.com和www.sourceforge.net網站!

㈤ 什麼是p2p技術下載

以下是網路資料:
點對點技術 點對點技術(peer-to-peer, 簡稱P2P)又稱對等互聯網路技術,是一種網路新技術,依賴網路中參與者的計算能力和帶寬,而不是把依賴都聚集在較少的幾台伺服器上。P2P網路通常用於通過Ad Hoc連接來連接節點。這類網路可以用於多種用途,各種檔案分享軟體已經得到了廣泛的使用。P2P技術也被使用在類似VoIP等實時媒體業務的數據通信中。
純點對點網路沒有客戶端或伺服器的概念,只有平等的同級節點,同時對網路上的其它節點充當客戶端和伺服器。這種網路設計模型不同於客戶端-伺服器模型,在客戶端-伺服器模型中通信通常來往於一個中央伺服器。
有些網路(如Napster, OpenNAP, 或IRC @find)的一些功能(比如搜索)使用客戶端-伺服器結構,而使用P2P結構來實現另外一些功能。類似Gnutella 或Freenet的網路則使用純P2P結構來實現全部的任務。
歷史
P2P 架構體現了一個互連網技術的關鍵概念,這一概念被描述在1969年4月7日第一份RFC文檔「RFC1,主機軟體」中。而最近,在不用中心索引伺服器結構實現多媒體文件交換的背景下,這個概念已經變的非常普遍了。
純P2P:
節點同時作為客戶端和伺服器端。
沒有中心伺服器。
沒有中心路由器。
雜P2P:
有一個中心伺服器保存節點的信息並對請求這些信息的要求做出響應。
節點負責發布這些信息(因為中心伺服器並不保存文件),讓中心伺服器知道它們想共享什麼文件,讓需要它的節點下載其可共享的資源。
路由終端使用地址,通過被一組索引引用來取得絕對地址。
混合P2P:
同時含有純P2P和雜P2P的特點。
P2P網路的優勢
P2P網路的一個重要的目標就是讓所有的客戶端都能提供資源,包括帶寬,存儲空間和計算能力。因此,當有節點加入且對系統請求增多,整個系統的容量也增大。這是具有一組固定伺服器的C/S結構不能實現的,這種結構中客戶端的增加意味著所有用戶更慢的數據傳輸。
P2P網路的分布特性通過在多節點上復制數據,也增加了防故障的健壯性,並且在純P2P網路中,節點不需要依靠一個中心索引伺服器來發現數據。在後一種情況下,系統也不會出現單點崩潰。
當用P2P來描述Napster 網路時,對等協議被認為是重要的,但是,實際中,Napster 網路取得的成就是對等節點(就象網路的末枝)聯合一個中心索引來實現。這可以使它能快速並且高效的定位可用的內容。對等協議只是一種通用的方法來實現這一點。
應用
點對點技術有許多應用。共享包含各種格式音頻,視頻,數據等的文件是非常普遍的,實時數據(如IP電話通信)也可以使用P2P技術來傳送。
有些網路和通信渠道,象Napster,OpenNAP,和IRC @find,一方面使用了C/S結構來處理一些任務(如搜索功能),另一方面又同時使用P2P結構來處理其他任務。而有些網路,如Gnutella 和 Freenet ,使用P2P結構來處理所有的任務,有時被認為是真正的P2P網路。盡管Gnutella 也使用了目錄伺服器來方便節點得到其它節點的網路地址。
學術性P2P網路
最近,賓夕法尼亞州立大學的開發者,聯合了麻省理工學院開放知識行動,西蒙弗雷澤大學的研究人員,還有第二代互連網P2P工作組,正在開發一個P2P網路的學術性應用。這個項目稱為LionShare,基於第二代網路技術,更詳細地說是Gnutella模型。這個網路的主要目的是讓眾多不同學術機構的用戶能夠共享學術材料。LionShare網路使用雜P2P網路類型,混合了Gnutella分散的P2P網路和傳統的C/S網路。這個程序的用戶能夠上傳文件到一個伺服器上,不管用戶是否在線,都能夠持續的共享。這個網路也允許在比正常小得多的共享社區中使用。
這個網路與當前正在使用的其他P2P網路的主要不同是LionShare網路不允許匿名用戶。這樣做的目的是防止版權材料在網路上共享,這同時也避免了法律糾紛。另一個不同是對不同組有選擇性的共享個別的文件。用戶能個別選擇哪些用戶可以接收這一個文件或者這一組文件。
學術社區需要這種技術,因為有越來越多的多媒體文件應用在課堂上。越來越多的的教授使用多媒體文件,象音頻文件,視頻文件和幻燈片。把這些文件傳給學生是件困難的任務,而這如果用LionShare這類網路則容易的多。
法律方面
在美國法律中,「Betamax判決」的判例堅持復制「技術」不是本質非法的,如果它們有實質性非侵權用途。這個網際網路廣泛使用之前的決定被應用於大部分的數據網路,包括P2P網路,因為已得到認可的文件的傳播也是可以的。這些非侵犯的使用包括發放開放源代碼軟體,公共領域文件和不在版權范圍之內的作品。其他司法部門也可用類似的方式看待這個情況。
實際上,大多數在P2P網路上共享的文件是版權流行音樂和電影,包括各種格式(MP3,MPEG,RM 等)。在多數司法范圍中,共享這些復本是非法的。這讓很多觀察者,包括多數的媒體公司和一些P2P的倡導者,批評這種網路已經對現有的發行模式造成了巨大的威脅。試圖測量實際金錢損失的研究多少有些意義不明。雖然紙面上這些網路的存在而導致的大量損失,而實際上自從這些網路建成以來,實際的收入並沒有多大的變化。不管這種威脅是否存在,美國唱片協會和美國電影協會正花費大量的錢來試著游說立法者來建立新的法律。一些版權擁有者也向公司出錢希望幫助在法律上挑戰從事非法共享他們材料的用戶。
盡管有Betamax判決,P2P網路已經成為那些藝術家和版權許可組織的代表攻擊的靶子。這裡麵包括美國唱片協會和美國電影協會等行業組織。Napster 服務由於美國唱片協會的投訴而被迫關閉。在這個案例中,Napster故意地買賣這些並沒有從版權所有者那得到許可發行的音像文件。
隨著媒體公司打擊版權侵犯的行為擴大,這些網路也迅速不斷地作了調整,讓無論從技術上還是法律上都難於撤除。這導致真正犯法的用戶成為目標,因為雖然潛在的技術是合法的,但是用侵犯版權的方式來傳播的個人對它的濫用很明顯是非法的。
匿名P2P網路允許發布材料,無論合法不合法,在各種司法范圍內都很少或不承擔法律責任。很多人表示這將導致更多的非法材料更容易傳播,甚至(有些人指出)促進恐怖主義,要求在這些領域對其進行規范。而其他人則反對說,非法使用的潛在能力不能阻止這種技術作為合法目的的使用,無罪推定必須得以應用,象其他非P2P技術的匿名服務,如電子郵件,同樣有著相似的能力。
安全方面
許多P2P網路一直受到懷有各種目的的人的持續攻擊。例子包括:
中毒攻擊(提供內容與描述不同的文件)
拒絕服務攻擊(使網路運行非常慢甚至完全崩潰)
背叛攻擊(用戶或軟體使用網路卻沒有貢獻出自己的資源)
在數據中插入病毒(如,下載或傳遞的文件可能被感染了病毒或木馬)
P2P軟體本身的木馬(如,軟體可能含有間諜軟體)
過濾(網路運營商可能會試圖禁止傳遞來自P2P網路上的數據)
身份攻擊(如,跟蹤網路上用戶並且折磨或合法地攻擊他們)
垃圾信息(如在網路上發送未請求的信息--不一定是拒絕服務攻擊)
如果精心設計P2P網路,使用加密技術,大部分的攻擊都可以避免或控制,P2P網路安全事實上與拜占庭將軍問題有密切聯系。然而,當很多的節點試著破壞它時,幾乎任何網路也都會失效,而且許多協議會因用戶少而表現得很失敗。
計算技術展望
技術上,一個純P2P應用必須貫徹只有對等協議,沒有伺服器和客戶端的概念。但這樣的純P2P應用和網路是很少的,大部分稱為P2P的網路和應用實際上包含了或者依賴一些非對等單元,如DNS。同時,真正的應用也使用了多個協議,使節點可以同時或分時做客戶端,伺服器,和對等節點。完全分散的對等網路已經使用了很多年了,象Usenet(1979年)和FidoNet(1984年)這兩個例子。
很多P2P系統使用更強的對等點(稱為超級對等點)作為伺服器,那些客戶節點以星狀方式連接到一個超級對等點上。
在1990年代末期,為了促進對等網路應用的發展,SUN公司增加了一些類到java技術中,讓開發者能開發分散的實時聊天的applet和應用,這是在即時通信流行之前。這個工作現在有JXTA工程來繼續實現。
P2P系統和應用已經吸引了計算機科學研究的大量關注,一些卓越的研究計劃包括Chord計劃, ARPANET, the PAST storage utility, P-Grid(一個自發組織的新興覆蓋性網路),和CoopNet內容分發系統。
國內外現狀
國外的P2P研究現狀
國外開展P2P研究的學術團體主要包括P2P工作組(P2PWG) 、全球網格論壇(Global Grid Forum ,GGF) 。P2P工作組成立的主要目的是希望加速P2P計算基礎設施的建立和相應的標准化工作。P2PWG成立之後,對P2P計算中的術語進行了統一,也形成相關的草案,但是在標准化工作方面工作進展緩慢。目前P2PWG已經和GGF合並,由該論壇管理P2P計算相關的工作。GGF負責網格計算和P2P計算等相關的標准化工作。
從國外公司對P2P計算的支持力度來看,Microsoft公司、Sun公司和Intel公司投入較大。Microsoft公司成立了Pastry項目組,主要負責P2P計算技術的研究和開發工作。目前Microsoft公司已經發布了基於Pastry的軟體包SimPastry/ VisPastry。Rice大學也在Pastry的基礎之上發布了FreePastry軟體包。
在2000年8月,Intel公司宣布成立P2P工作組,正式開展P2P的研究。工作組成立以後,積極與應用開發商合作,開發P2P應用平台。2002年Intel發布了. Net基礎架構之上的Accelerator Kit (P2P加速工具包) 和P2P安全API軟體包,從而使得微軟. NET開發人員能夠迅速地建立P2P安全Web應用程序。
Sun公司以Java技術為背景,開展了JXTA項目。JXTA是基於Java的開源P2P平台,任何個人和組織均可以加入該項目。因此,該項目不僅吸引了大批P2P研究人員和開發人員,而且已經發布了基於JXTA的即時聊天軟體包。JXTA定義了一組核心業務:認證、資源發現和管理。在安全方面,JXTA加入了加密軟體包,允許使用該加密包進行數據加密,從而保證消息的隱私、可認證性和完整性。在JXTA核心之上,還定義了包括內容管理、信息搜索以及服務管理在內的各種其它可選JXTA服務。在核心服務和可選服務基礎上,用戶可以開發各種JXTA平台上的P2P應用。
國內的P2P研究現狀
• 北京大學—Maze
Maze 是北京大學網路實驗室開發的一個中心控制與對等連接相融合的對等計算文件共享系統,在結構上類似Napster,對等計算搜索方法類似於Gnutella。網路上的一台計算機,不論是在內網還是外網,可以通過安裝運行Maze的客戶端軟體自由加入和退出Maze系統。每個節點可以將自己的一個或多個目錄下的文件共享給系統的其他成員,也可以分享其他成員的資源。Maze支持基於關鍵字的資源檢索,也可以通過好友關系直接獲得。
• 清華大學—Granary
Granary是清華大學自主開發的對等計算存儲服務系統。它以對象格式存儲數據。另外,Granary設計了專門的結點信息收集演算法PeerWindow的結構化覆蓋網路路由協議Tourist。
• 華中科技大學—AnySee
AnySee是華中科大設計研發的視頻直播系統。它採用了一對多的服務模式,支持部分NAT和防火牆的穿越,提高了視頻直播系統的可擴展性;同時,它利用近播原則、分域調度的思想,使用Landmark路標演算法直接建樹的方式構建應用層上的組播樹,克服了ESM等一對多模式系統由聯接圖的構造和維護帶來的負載影響。
更詳細介紹見〔中國計算機學會通訊 Page 38-51 鄭緯民等 對等計算研究概論〕
企業研發產品
• 廣州數聯軟體技術有限公司-Poco
POCO 是中國最大的 P2P用戶分享平台 , 是有安全、流量控制力的,無中心伺服器的第三代 P2P 資源交換平台 , 也是世界范圍內少有的盈利的 P2P 平台。目前已經形成了 2600 萬海量用戶,平均在線 58.5 萬,在線峰值突破 71 萬,並且全部是寬頻用戶的用戶群。 成為中國地區第一的 P2P 分享平台。[a]
• 深圳市點石軟體有限公司-OP
OP-又稱為Openext Media Desktop,一個網路娛樂內容平台,Napster的後繼者,它可以最直接的方式找到您想要的音樂、影視、軟體、游戲、圖片、書籍以及各種文檔,隨時在線共享文件容量數以億計「十萬影視、百萬音樂、千萬圖片」。OP整合了Internet Explorer、Windows Media Player、RealOne Player和ACDSee ,是國內的網路娛樂內容平台。[a]
• 基於P2P的在線電視直播-PPLive
PPLive是一款用於互聯網上大規模視頻直播的共享軟體。它使用網狀模型,有效解決了當前網路視頻點播服務的帶寬和負載有限 問題,實現用戶越多,播放越流暢的特性,整 體服務質量大大提高!(2005年的超級女聲決賽期間,這款軟體非常的火爆,同時通過它看湖南衛視的有上萬觀眾)

㈥ java中UDP,DCP TCP與IP的區別是什麼

答:通用即插即用 (UPnP) 是一種用於 PC 機和智能設備(或儀器)的常見對等網路連接的體系結構,尤其是在家庭中。UPnP 以 Internet 標准和技術(例如 TCP/IP、HTTP 和 XML)為基礎,使這樣的設備彼此可自動連接和協同工作,從而使網路(尤其是家庭網路)對更多的人成為可能。 答:簡單、更多選擇和更新穎的體驗。包含通用即插即用技術的網路產品只需實際連到網路上,即可開始正常工作。實際上,UPnP 可以和任何網路媒體技術(有線或無線)協同使用。舉例來說,這包括:Category 5 乙太網電纜、Wi-Fi 或 802.11B 無線網路、IEEE 1394 ("Firewire")、電話線網路或電源線網路。當這些設備與 PC 互連時,用戶即可充分利用各種具有創新性的服務和應用程序。 答:UPnP 范圍廣泛,原因是它面向的是家庭網路、臨近網路及小型企業和商住樓中的網路。在網路控制設備的管理下,它支持任何兩個設備之間的數據通訊。UPnP 不依賴於特定的操作系統、編程語言或物理媒體。 UPnP 支持零配置網路及自動查找功能,這樣以來,設備即可動態加入網路,獲取 IP 地址,宣布自己的名稱,根據需要提供功能,並了解其它設備的存在和功能。DHCP 和 DNS 伺服器為可選項。只要在網路上可用,即可加以使用。此外,設備還可自動平穩地脫離網路,而不會遺留任何不必要的狀態。UPnP 汲取了 Internet 的成功之處並繼承了它的組件,包括 IP、TCP、UDP、HTTP 及 XML。UPnP 中涉及了多供應商之間的協作,旨在建立標準的設備控制協議 (DCP)。與 Internet 類似,這些協議以公告式線協議為基礎,表示為 XML 形式,且通過 HTTP 進行通訊。 以下是BC官方網站對UPnP的解釋:UPnP(Universal Plug and Play),通用即插即用,是一組協議的統稱,不能簡單理解為UPnP=「自動埠映射」。 在BitComet下載中,UPnP包含了2層意思: 1、對於一台內網電腦,BitComet的UPnP功能可以使網關或路由器的NAT模塊做自動埠映射,將BitComet監聽的埠從網關或路由器映射到內網電腦上。 2、網關或路由器的網路防火牆模塊開始對Internet上其他電腦開放這個埠。我倒是覺得微軟的解釋過於理論化,適合寫入牛津大詞典;而BC官方網站的解釋過於含蓄晦澀。其實對於一般的使用者來講,簡單的把UPnP理解為自動埠映射就可以了。它就是一種基於TCP/IP協議的,針對設備彼此間的通訊而制訂的新的Internet協議,目的就是希望未來所有聯入Internet中的設備能夠不受網關阻礙的相互通信。 1、只有在需要使用一些支持UPnP功能的P2P軟體的時候,如BT、電騾eMule、MSN等,我們才需要考慮UPnP這個東東。如果你根本就不用這些軟體,僅僅是上網瀏覽的話,下文就沒必要看了; - -關於寬頻用戶是內網還是外網之完全解析- - 3、如果你是內網用戶,但你已經手動為這些P2P軟體進行了埠映射,如在使用BC下載時,在「用戶列表」中已經看到「遠程」,或者是使用電騾eMule連接伺服器成功後,已經顯示為高ID,那麼下文也可以不看了。 但需要注意的是,手動做的埠映射只是針對某個P2P軟體起作用,如果再使用新的P2P軟體的話,仍然需要針對新的P2P軟體做相應的埠映射才可以; - -ADSL MODEM埠映射方法詳解- -

㈦ 什麼是Java網路編程

網路編程主要是指網路通信,實現計算機與計算機之間的對話和文件傳輸等,就像QQ,飛秋,P2P點對點傳輸等等

㈧ 廣域網實現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

源碼已發送請查收

閱讀全文

與p2pjavaudp相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163