编写简单的P2P聊天应用程序

时间:2012-01-03 22:32:15

标签: sockets networking chat p2p

这是我第一次使用P2P,我需要一些关于设计的帮助。

我正在开发一个简单的Messenger应用程序。我有一个目录服务器,每个用户都在其上进行身份验证并宣布一个可以访问每个用户的开放端口。目录服务器维护用户和端口,我可以查询目录服务器以查找任何特定用户。这部分完成了。第二部分是我认为应该是P2P的聊天。我可以开始聊天,也可以作为聊天的终点(客户端和服务器)

令我困惑的是我如何处理P2P?我是否创建了两个不同的套接字?我正在侦听TCP传入连接请求,另一个我将发送TCP请求以开始聊天。

在这种情况下,我需要3个套接字,一个用于与服务器通信,两个用于P2P?

1 个答案:

答案 0 :(得分:0)

如果你想使用P2P,你最好使用一个框架,例如JXTA,如果你是用Java编码的话。创建套接字本身可能还不够,因为如果您在LAN之外运行,则需要处理更复杂的问题,例如NAT遍历。

好像你有一个中心对等点(某些服务器)。如果它有一个公共IP地址,那么你可以实现类似TURN的架构(对等体通过这个中心对等体进行通信)。如果你想在对等体之间建立直接连接,那么你正在寻找一个STUN解决方案,但你仍然需要一个中心对等体来促进沟通。

TCP Stun并不容易。 UDP并不是很复杂,你只需要在NAT中打一个洞。现在,请记住NAT遍历并不总是可行的(它取决于NAT本身)。在这种情况下,备份解决方案在STUN中。