2012-09-18 63 views
0

我需要開發一個不使用任何框架的p2p應用程序,比如JXTA。我通過StackOverflow中的各種主題進行搜索,但沒有得到我想要的。我有一臺維護客戶端及其資源列表的服務器。客戶端將聯繫服務器以確定哪個客戶端有什麼。客戶端從服務器獲取此信息後,它將與其他客戶端建立p2p連接 - 服務器不參與此操作。沒有任何框架的java p2p

我需要知道如何在同一個程序中創建客戶端套接字和服務器套接字,即程序應該像服務器和客戶端。請幫助我。

for ex: 
client code 
Socket clientSocket = new Socket("localhost", 10000); 

server code 
ServerSocket welcomeSocket = new ServerSocket(10000); 

    while(true) 
    { 
     //client socket 
     Socket connectionSocket = welcomeSocket.accept(); 
     ....... 
     ....... 
    } 

我將如何添加一個serversocket到我的客戶端並使其像服務器一樣工作?我知道我必須使用線程,但任何人都可以詳細解釋這一點嗎?或請發佈相關的線程..我厭倦了通過各種論壇和網站查找..

+0

stackoverflow是更具體的問題。這就是爲什麼人們總是問「你試過了什麼?」 「你有什麼問題?」。在你的情況下,你需要的是關於幾個主題的指導:如何構建聊天/ p2p應用程序,如何在Java中使用普通套接字等等。也許你可以將你的問題重新定義爲「關於...的教程建議」,列出你不知道如何去做的具體事情。 – helios

+0

旁註:如何添加「serversocket」並使其成爲服務器。唯一的區別是server = passive(監聽),client = active(連接)。一個人在等待其他人(客戶)連接的端口上收聽。你的應用程序必須能夠在做自己的東西時監聽連接(連接到其他客戶端)。 – helios

+0

你需要有兩個線程,一個用於客戶端,另一個用於服務器...(除非你使用基於NIO的非阻塞IO ..在這種情況下,你最好使用一個框架,因爲NIO很難*做對)。你的代碼看起來很好,試試吧! –

回答

1

實際上有很多方法來編寫關於線程和IO的網絡代碼(請參閱http://www.kegel.com/c10k.html)。我想傳統的方法是創建一個線程來處理每個連接,在the Java tutorial的底部解釋。如果連接已建立,執行某些操作,然後關閉,那就很好了。

但是,如果您始終保持連接打開,則最終可能會創建太多的線程和開銷。因此,其他方法。

另外,你應該考慮使用一些通用的java網絡庫。您可以實現自己的協議和通信模型,但仍然可以節省一些工作量,並且可能會得到更好的代碼。

+0

此外,這是一個相關的問題http://stackoverflow.com/questions/1215418/java-complete-code-examples-of-thread-per-connection-blocking-io-versus-nio –

相關問題