我打算用 Java 7 编写一个 P2P 聊天应用程序,其中我们有一个联系人列表(就像在 Skype 之类的应用程序中一样)。然后,我们可以要求每个连接的联系人开始聊天会话(就像在 Skype 中一样)。但是 Java Socket 实现要求我们提供另一个端点的 Ip-Adress。这导致我有两个主要问题:
- 管理动态 IP 地址:特别是在其他端点用户连接之前
- 管理其他用户每次都可以简单地使用另一台计算机的事实
那么,你能建议我什么解决方法?
问候
用户应该使用一些 ID 来标识自己,例如使用电子邮件地址或登录名。
您必须在系统中创建一些“固定点”,例如给定的 IP 地址或域名,客户端可以在其中注册自己(您可以在那里存储用户 ID)。
每次更改 IP 地址时,客户端都会在服务器上更新它,因此请求联系信息的其他客户端将获得新的 IP。
您可以依靠一些外部基础设施进行识别。例如,可以使用 OpenPGP 签名的消息和密钥来识别发送者。PGP 密钥经过签名和信任,并且存在用于验证的 PGP 密钥集中存储库。在这种情况下,IP 地址无关紧要,但发件人仍然需要知道将消息发送到哪里,即您仍然需要一个目录(一些具有已知地址的服务器)来维护 IP<->用户映射。