【问题标题】:Running client and server on same machine在同一台机器上运行客户端和服务器
【发布时间】:2012-03-04 22:27:12
【问题描述】:

我有一个使用 UDP 端口 25565 的客户端和服务器应用程序。 为了在同一台机器上运行这些,因为只有一个应用程序可以将自己绑定到端口 25565,这是否意味着我必须使用两个单独的端口在应用程序之间传输数据?

我想到的是以下-

客户端 -> 25565 -> 服务器

客户端

这是唯一的解决方案还是有另一种处理方式?

【问题讨论】:

    标签: c++ sockets networking network-programming winsock


    【解决方案1】:
    • 您的服务器应用程序打开一个端口并等待客户端连接。
    • 客户端需要提前知道这个端口,这样它才能建立到所需服务的连接。
    • 客户端可以使用任何可用端口来启动此连接(最好使用 > 1000 的端口)。
    • 服务器在传入的数据包中看到客户端正在使用的端口,因此它将向它发送 anwser。无需在设计中指定。
    • 握手后,TCP/IP 连接由以下 4 个值标识:服务器 IP、服务器端口、客户端 IP、客户端端口。
    • 没有其他连接可以具有相同的四个值。

    回答你的问题。 TCP/IP 连接是双向的,一旦建立,服务器就可以向客户端发送数据,反之亦然。

    我会画出这样的方案:

    SERVER 端口 25565 CLIENT 端口 25566(或任何其他端口)

    【讨论】:

    • 我没有使用 TCP,我使用的是 UDP。
    • 我猜你知道 UDP 不安全,你可能会丢失数据包,它们可能会以错误的顺序到达,你不能将网关从服务器传递到客户端等等......但是服务器和客户端都是在同一台机器上。使用 UDP,您的客户端可以打开任何端口来监听并告诉服务器发送到那里。而且您的方案适合 UDP。
    • 是的,我知道它不安全,但它不应该成为我的目标的问题。谢谢:)
    【解决方案2】:

    嗯,不。只有服务器需要监听端口 25565 - 客户端将只连接到该端口。没有理由指定端口应该“使用”哪个客户端来连接到该端口。此外,一旦服务器接受了连接,端口就可以侦听其他请求。

    【讨论】:

    • 我忘了说我正在使用 UDP 套接字。
    【解决方案3】:

    独立 UDP 端口的全部意义在于消除侦听传入数据包的应用程序之间的冲突。更改其中一个端口可能是最好的解决方案。

    但是,如果您真的希望两个程序在同一个端口上侦听,则需要使用虚拟网络接口,例如 TUN/TAP(有一个Windows port)。然后两个应用程序将绑定到具有相同编号但在不同网络接口上的端口。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2017-06-01
      • 1970-01-01
      • 2017-05-26
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多