在同一台机器上运行客户端和服务器

时间:2012-03-04 22:27:12

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

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

我想到的是以下内容 -

客户 - > 25565 - >服务器

客户< - 25566< - 服务器

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

3 个答案:

答案 0 :(得分:4)

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

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

我会像这样画出这个计划:

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

单独UDP端口的重点是消除侦听传入数据包的应用程序之间的冲突。更改其中一个端口可能是最佳解决方案。

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