应用程序如何在不需要端口转发的情况下连接到服务器?

Dan*_*ter 5 c# sockets networking udp

我刚刚创建了一个简单的聊天客户端,它仅在所有客户端/服务器都在同一端口上进行端口转发时才有效。

我如何使我的应用程序(它在 c# 中并使用 .net 套接字 btw)在不需要客户端端口转发的情况下工作(我不在乎服务器是否需要端口转发)。

顺便说一下,它使用udp。

Mat*_*int 5

我相信你的问题标题是错误的。你说的是服务器连接到客户端,对吗?

如果您直接使用套接字,那么简短的答案是 - 不能。长的答案是客户端必须以客户端端口保持开放的方式向服务器注册,以便服务器可以访问它。

不要自己编写这个,而是考虑一个专注于此的库,例如SignalR

此外,无论如何,UDP 对于聊天客户端来说都是一个糟糕的选择。关于 UDP 数据包的笑话有很多,但相信我 - 您不会全部明白。


Mik*_*lls 0

您需要在所有客户端连接到的中间位置有一个服务器。您不能让 nat 框后面的 1 个客户端连接到 nat 框后面的另一个客户端。他们都需要连接到服务器并保持该连接打开。然后,客户端 A 向服务器发送一条消息,服务器将消息转发给客户端 B。