是否可以在没有服务器的情况下编写TCP P2P程序? 当我在Google上搜索这个问题时,我发现了一些关于NAT遍历的内容,UPnP,我可以用某种方式使用它们吗?
答案 0 :(得分:5)
是的,你可以(在GrandmasterB指出的地方,每个对等体都有服务器和客户端套接字)。但是,NAT可能会让你痛苦,正如你可能已经知道的那样。
如果您不能使用中间件(客户端连接的公共IP地址上的服务器(*)) - 并且您可能不想要这些,因为它们与P2P的观点相反 - 而且您没有请记住使用SDP描述您的连接详细信息,您可以尝试Interactive Connectivity Establishment。
基本上,ICE尝试不同的策略来连接。它是一个可插拔的架构,因此您可以添加自己的自定义策略。默认情况下,ICE描述了UDP遍历的技术,但允许TCP连接的extension正在进行中。
(*)您可以随时尝试像IRC这样的架构,您可以在其中连接任意数量的服务器。这至少是P2P的一半。 (这也是SIP使用的架构。)
答案 1 :(得分:2)
这真的取决于你对'服务器'的意思。您无论如何都不需要集中式服务器。根据其定义,术语“p2p”意味着没有集中式服务器。
但是从其他应用程序接收数据的应用程序需要能够侦听传入的tcp / ip连接......这通常被认为是“服务器”功能,即使您不将其称为“服务器”。因此,在您的情况下,您的p2p应用程序需要内置服务器和客户端(启动连接)功能。