Java 我应该如何处理P2P连接软件上的TCP套接字?

Java 我应该如何处理P2P连接软件上的TCP套接字?,java,sockets,tcp,p2p,Java,Sockets,Tcp,P2p,我正在启动一个新的P2P私有软件。应使用TCP套接字,不使用UDP。别担心NAT 由于我是新开发这类软件和网络的人,我有一些问题。这个软件应该能够:添加朋友,与朋友聊天和下载文件从朋友,包括多源 我的问题是: -通信协议:我应该使用序列化对象吗?或者Json?我认为Json更轻、更快 -我应该如何处理用于通信、聊天和文件传输的p2p连接和套接字?我打算像所有p2p软件一样,在chuncks中分割文件进行共享。但是,我应该如何处理插座?我是说一个朋友只有一个插座?或者给朋友一个聊天的插座,然后每个

我正在启动一个新的P2P私有软件。应使用TCP套接字,不使用UDP。别担心NAT

由于我是新开发这类软件和网络的人,我有一些问题。这个软件应该能够:添加朋友,与朋友聊天和下载文件从朋友,包括多源

我的问题是:

-通信协议:我应该使用序列化对象吗?或者Json?我认为Json更轻、更快

-我应该如何处理用于通信、聊天和文件传输的p2p连接和套接字?我打算像所有p2p软件一样,在chuncks中分割文件进行共享。但是,我应该如何处理插座?我是说一个朋友只有一个插座?或者给朋友一个聊天的插座,然后每个文件下载/上传多一个插座?我应该只使用一个插座吗

-p2p软件如何知道下载该文件的顺序

顺便说一句,我使用Java是因为它快速且易于开发


问题:


我应该如何处理插座?一个朋友只需要一个插座就可以进行所有操作,或者一个朋友只需要一个插座就可以聊天,然后每个文件下载/上传都需要一个插座

套接字的概念在参考服务器设置时共享,每个客户端作为套接字id,当该客户端尝试与服务器建立连接时,服务器会将结果注册到其连接池中。您的环境需要是多线程的,以处理来自客户端的并发请求。请阅读《oracle指南》。这对于以更连贯的方式理解这一概念非常有用。

这些我都知道。不要回答我关于每个客户端用于聊天或文件共享的套接字数量或任何问题。您只需要为每个客户端使用一个套接字,您将使用一个中心套接字,即主套接字。然后是作为传入连接的子套接字。这个问题太宽泛,也太固执己见了。有很多方法可以做到这一切,因此没有一个平台可以通过它来指导你。请阅读并自由提问您的实现中的具体问题。主要问题是问题2,其余是在人们提问时的细节。同样,这是自以为是的。我可以告诉你我会怎么做,但这并不意味着它对你有用。其他用户可能对此有不同的看法。您肯定不能为所有连接使用一个插座。TCP是“1:1”。我建议使用不同的频道进行上传/下载,否则可能会干扰聊天。然后,我不会使用序列化对象,而是使用XML或JSON等形式的数据抽象。也许以后您想添加JavaScript或C#/.net或Python(…)客户端。。。序列化的java对象将成为一个showtupper。