你如何发现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(或其他一些轻量级数据存储)之类的东西来保存注册,或者如果您愿意,可以编写自己的注册。