networking - 使用中间服务器创建对等连接

标签 networking client-server p2p network-protocols

我想连接两个客户端(通过 TCP/IP 套接字)。客户端可以使用中间服务器相互发现。一旦客户端发现彼此,服务器就不应该有任何参与。

我对此做了一些研究,发现很多人建议JXTA .但是我想自己从头开始创建协议(protocol)(因为将来我可能还必须使用 WebSockets 来实现相同的协议(protocol)(当我的客户端是浏览器时))。目前,我的客户可以是桌面应用程序或移动应用程序。

我的问题是:

  • 客户端如何在服务器上发现彼此?如果服务器将客户端的全局 IP 地址发送给对方,这些信息是否足以创建对等连接?如果客户端在同一个 LAN 网络上而服务器在不同的 WAN 上怎么办?
  • 客户端具有动态 IP 地址。即使它有一个事件的套接字,他们的 IP 是否会突然改变?
  • 点对点连接对于传输非连续数据(如在聊天应用程序中)是否可靠?

  • [注意:点对点连接是指通过将客户端之一作为临时套接字服务器来建立客户端-服务器 TCP/IP 套接字连接(使用 Java)]

    提前致谢。

    最佳答案

    1)当客户端连接到服务器时,他们必须通知服务器端口号,他们将为来自其他客户端的传入连接保持打开状态。服务器将知道客户端的 IP 地址。然后服务器将需要将这些详细信息传达/发送给另一方/客户端。客户的实际位置没有任何区别。如果两个客户端在同一个网络上,网络路由器会找到它们并缩短它们的通信路径。

    2) 动态 IP 地址在事件连接期间不能更改 - 如果更改,则连接将被丢弃,并且两个客户端都必须通过 1) 中的服务器重新启动连接

    3) 是的

    关于networking - 使用中间服务器创建对等连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576934/

    相关文章:

    python - 我们如何使用 Python 通过网络传输大量数据?

    azure - 无法连接到 Azure 文件共享驱动器,使用映射驱动器无法连接,我也添加了端口 445

    c# - 单个数据库和多个用户桌面应用程序

    networking - P2P 应用程序中的直接 TCP/IP 连接

    c - c中有P2P框架吗?

    java - 如何获取DataInputStream中的数据量? - java

    networking - 我们可以手动限制网络接口(interface)的带宽吗?

    iphone - iOS。为 HTTP 聊天客户端从服务器(动态间隔)提取数据的最佳方式?

    networking - 有没有办法在 Kubernetes 中保留传出流量的源端口?

    javascript - 保持两个客户端之间的通信,即使他们的 IP 地址发生变化