2017-03-07 34 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