当从LAN上的另一台机器向TcpListener服务发送消息时,您需要知道服务器的IP地址和端口。该端口很可能已经知道,因为您可能已经选择了该端口,但如果IP地址可能有所不同,您是否可以通过某种方式发现该IP地址。
在我看来,您需要通过其他方法将此信息提供给发件人。
答案 0 :(得分:5)
实现此目的的一种方法是使用UDP多播。
基本上,您可以使用众所周知的(预先确定的)多播IP和端口来监听所有应用程序。然后,每个主机广播到该地址,并包括用于在消息体中建立TCP连接的TCP IP和端口。如果是游戏大厅系统,您还可以包含诸如总玩家数量,需要的数量等信息。
请注意,您控制广播的频率,当我这样做时,1000毫秒的轮询间隔证明是足够的,但您可以将其设置为您想要的任何值(基于您的LAN速率,数据包大小等)
上的UdpClient.JoinMulticastGroup您还应该知道,多播IP范围是:
组播地址范围是224.0.0.0到239.255.255.255。
出于某种原因,信息不容易找到:)
答案 1 :(得分:2)
TCPListener实现这一目标并不神奇。您需要提供一种机制将该信息传递给客户端。我能想到的几种方式:
我有一个类似的项目,并使用注册表和心跳服务作为一个非常好的解决方案。您可以使用Zookeeper或Redis(或其他轻量级数据存储)之类的东西来保存注册,或者如果您愿意,可以自己编写。