包含java的p2p應用的詞條

本文目錄一覽:

基於java的p2p實現文件共享和傳輸

在JAVA中,發送和接收多播信息的方法: 

發送多播信息需經歷步驟 

確定發送的具體信息內容 

String msg = “Hello”; 

選用專門為多播指定的D類IP地址(224.0.0.1到239.255.255.255),創建一個多播組 

InetAddress group = InetAddress.getByName(“228.5.6.7”); 

使用指定的埠(一般選1024以上的埠號)建立多播套接字 

MulticastSocket s = new MulticastSocket(6789); 

加入多播組 

s.joinGroup(group); 

創建一個數據報封裝多播信息 

DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), 

group, 6789); 

發送 

s.send(hi); 

接收多播信息的步驟 

開闢接收緩衝區 

byte[] buf = new byte[1000]; 

創建接收數據報 

DatagramPacket recv = new DatagramPacket(buf, buf.length); 

接收 

s.receive(recv); 

注意:以上發送和接收程序在同一個文件中實現,若在不同文件中實現則應分別定義多播套接字並加入多播組。 

3.與已知IP和埠的端點通信 

在互聯網上主要採用TCP和UDP來實現兩點之間的通信。採用TCP可可靠傳送信息,但花費時間較多;採用UDP可快速傳遞信息,但不能保證可靠傳遞。

JAVA實現TCP通信的方法 :

利用Socket(InetAddress addr, int port)和 Socket(String host, int port),創建客戶端套接字,利用ServerSocket(int port)創建伺服器端套接字,port埠就是伺服器監聽連接請求的埠,通過調用accept()返回一個最近創建的Socket對象,該Socket對象綁定了客戶程序的IP地址或埠號。通過調用Socket的 getInputStream()方法獲得輸入流讀傳送來的信息,也可能通過調用Socket的 getOutputStream()方法獲得輸出流來發送消息。 

 

JAVA實現UDP通信的方法 :

使用DatagramPacket(byte [] buffer, int length, InetAddress addr, int port) 確定數據包數組、數組的長度、數據包的地址和埠信息。使用DatagramSocket()創建客戶端套接字,而伺服器端則採用DatagramSocket(int port),調用send(DatagramPacket dgp)和 receive(DatagramPacket dgp)來發送和接收數據包。本文設計的程序採用UDP。

P2P(Peer-to-Peer 端到端)模型是與C/S(客戶/伺服器)模型相對應。基於C/S的用戶間通信需要由伺服器中轉,在C/S中的伺服器故障將導致整個網路通信的癱瘓。。而基於P2P的用戶間通信則是直接通信,去掉了伺服器這一層,帶來的顯著優點是通信時沒有單一的失敗點,一個用戶的故障不會影響整個P2P網路。本文提供了一種用JAVA實現P2P網路通信的方法。   

如何使用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語言來做P2P貸款平台開發啊?有什麼好處?

當然也有其它語言,只是用java的比較多,比如迪蒙網貸系統,大部分用的是java語言開發的系統,安全無漏洞;Java主要用於網路應用程序開發(網站建設等),因此對安全性有較高的要求,Java通過自己的安全機制防止了病毒程序的產生和下載程序對本地系統的威脅破壞。做P2P對安全性要求高,所以大部分用的是java語言。

p2p網貸平台系統都是用什麼語言開發的?熟知的語言有C++,java.

網貸系統一般有java版、PHP版、第三方資金託管版、定製版,後兩種其實都是用java和PHP語言做的,不過是根據客戶需要增加了功能。一般的話用的比較多的還是java版,但是PHP版開發速度會更快一些。雄貓軟體做的P2P網貸系統就有java3.0版、PHP3.0版、第三方資金託管版、定製版,案例近百家,業內口碑很好。

再看看別人怎麼說的。

p2p 用JAVA寫好,還是用VC++好?

建議C++。因為跨平台的關係,java無法去過細的去實現底層的細節。而Java虛擬機也未能覆蓋那麼多範圍——雖然這種情況可能會最終有所改觀,但總體當前實現有可能性不大。

C++是實現這類程序的再方便不過的工具。相關的API都是用C寫的,使用起來很方便。

如果一定要用Java,可以參看SUN公司在2000年就推出了JXTA,該技術的目的是為P2P的網路應用開發提供一個統一的平台,而且為了鼓勵和支持該技術的發展,JXTA項目採用了開放源碼的方式,因此吸引了大量業界人士參與到JXTA技術的研究與應用當中,你可以從這方面入手來查找資料。

原創文章,作者:LVQ3A,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127393.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LVQ3A的頭像LVQ3A
上一篇 2024-10-03 23:15
下一篇 2024-10-03 23:15

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論