你如何发现TCPListener服务的IP地址?

从LAN上的另一台计算机向TcpListener服务发送消息时,您需要知道服务器的IP地址和端口。 该端口很可能已经知道,因为您可能已经选择了该端口,但如果IP地址可能不同,您是否可以通过某种方式发现该IP地址。

在我看来,您需要通过另一种方法向发件人提供此信息。

实现此目的的一种方法是使用UDP多播。

基本上,您可以使用众所周知的(预先确定的)多播IP和端口来监听所有应用程序。 然后,每个主机广播到该地址,并包括它们的TCP IP和端口,用于在消息体中建立TCP连接。 如果是游戏大厅系统,您还可以包含诸如总玩家数量,需要的数量等信息。

请注意,您控制广播的频率,当我这样做时,1000毫秒的轮询间隔certificate是足够的,但您可以将其设置为您想要的任何内容(基于您的LAN速率,数据包大小等)

MSDN上的 UdpClient.JoinMulticastGroup

您应该知道的另一件事是,多播IP范围是:

组播地址范围是224.0.0.0到239.255.255.255。

的Technet

由于某种原因,信息不是很容易找到:)

TCPListener实现这一目标并不神奇。 您需要提供一种机制将该信息传递给客户端。 我能想到的几种方式:

  • 使用DNS或目录服务(例如LDAP或Active Directory)
  • 使用注册表服务(即您的服务器向服务器注册,可能经常刷新,然后客户端从那里检索服务器地址)
  • 服务器响应任何客户端广播请求(有点类似于ARP)

我有一个类似的项目,并使用注册表和心跳服务作为一个非常好的解决方案。 您可以使用Zookeeper或Redis(或其他一些轻量级数据存储)之类的东西来保存注册,或者如果您愿意,可以编写自己的注册。