【发布时间】:2019-10-22 16:35:34
【问题描述】:
我想创建一个简单的消息应用程序,它使用 tcp 协议进行通信,包括与多人通信。消息被发送到服务器,服务器将它们分发给所有其他客户端。目前,我已经完全运行,并且运行良好 - 在本地计算机和本地网络上,使用 ipv4 地址。
经过广泛的 Google 搜索后,我发现要从不同的网络进行通信,我需要对我的服务器进行端口转发。但是,如何使我的服务器能够在没有所有客户端端口转发的情况下与客户端通信?据我所知,并不是每个人的设备都是端口转发的。
那么,我该如何实现呢?仅使用 C# 是否可行?还是我误解了什么,实际上不需要端口转发?
感谢所有帮助。
【问题讨论】:
-
谁投票结束这篇文章过于广泛,需要重新阅读这篇文章。
-
您不需要端口转发。所有客户端都应该使用相同的端口号连接到服务器。您需要服务器上的应用程序软件来接收所有传入的消息并发送到其他客户端。
-
@jdweng 对不起,如果我误解了,但是如果他无法通过套接字或端口访问它们,服务器如何将其发送给所有客户端?
-
服务器是一个监听器,它接受来自一个或多个客户端的连接。所以服务器为每个客户端都有一个套接字,它们都使用相同的端口号,但每个客户端都有不同的 IP。套接字连接具有三个属性 1) 源 IP 地址 2) 目标 IP 地址 3) 端口号。因此,每个客户端都使用相同的目标 IP 地址和端口号连接到服务器。客户端 IP 地址是连接开始的机器(源 IP)。因此,您的服务器同时向每个客户端发送消息。每个客户端都是不同的套接字。
-
@jdweng 好的,谢谢。那么如果客户端连接到服务器,他可以将信息发回给他们吗?在这种情况下,我需要端口转发服务器吗?此外,这是否适用于内置的 Tcp Listener 和 TcpClient 类?
标签: c# networking tcp