2017-03-07 41 views
0

我開始一個新的P2P私人軟件。應該使用TCP套接字,不使用UDP。不要擔心NAT。我應該如何處理P2P連接軟件上的TCP套接字?

由於我是新開發這種類型的軟件和網絡我有一些問題。該軟件應該能夠:添加朋友,與朋友聊天,並從朋友下載文件,包括多源。

我的問題是:

-communication protocol:should I use serialized objects?或者也許Json?我認爲Json更輕更快。

我 - 如何應處理通信的P2P連接插座,聊天和文件傳輸?我打算像大家所有的p2p軟件一樣將文件分成chunck進行共享。但是,我應該如何處理插座?我的意思是一個朋友只有一個插座?或者可能是朋友聊天的套接字,然後每個文件下載/上傳多一個套接字?我應該只用一個插座嗎?

- 如何P2P軟件下載知道該文件chuncks的順序?

順便說一句,我使用Java,因爲速度快,易於開發。


問題:

我應該如何處理套接字?對於一個朋友來說,只需一個套接字就可以進行所有操作,或者可以是朋友聊天的套接字,然後每個文件下載/上傳多一個套接字?

+0

這個問題太廣,以及固執己見。有很多方法可以做到這一點,所以SO不是通過這種方式來輔導你的平臺。請閱讀[問]並隨時就您實施的具體問題提出問題。 – Fildor

+0

主要問題是問題2,其餘的細節在人們問及的情況下。 – juanjo

+0

再一次,它是自以爲是的。我可以告訴你我*會做什麼,但這並不意味着它適合你。其他用戶對此可能會有不同的看法。你肯定*不能做的是爲所有連接使用一個套接字。 TCP是「1:1」。我建議使用不同的頻道上傳/下載,因爲它可能會干擾聊天。然後,我不會使用序列化對象,而是使用XML或JSON等形式的數據抽象。也許稍後想要添加JavaScript或C#/ .net或Python(...)客戶端...序列化的java對象將成爲一個炫耀者。 – Fildor

回答

0

插座的概念在參考共享到服務器的設置,每個客戶端作爲套接字ID,當客戶端試圖與服務器該服務器的連接寄存器所得到其connections.Your環境的池需要是多用於處理來自客戶端的併發請求。請閱讀oracle指南,這對於理解以更加一致的方式引入的概念非常有用。 http://docs.oracle.com/javase/tutorial/networking/sockets/

+0

我知道這一切。不回答我關於每個客戶端用於聊天或文件共享或任何問題的套接字數量的問題。 – juanjo

+0

您只需要爲每個客戶端提供一個套接字,您將有一箇中央套接字,即主套接字。然後是傳入連接的子插座。 – Remario