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

时间:2014-05-05 23:20:24

标签: c# sockets tcplistener

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

在我看来,您需要通过其他方法将此信息提供给发件人。

2 个答案:

答案 0 :(得分:5)

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

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

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

MSDN

上的UdpClient.JoinMulticastGroup

您还应该知道,多播IP范围是:

  

组播地址范围是224.0.0.0到239.255.255.255。

Technet

出于某种原因,信息不容易找到:)

答案 1 :(得分:2)

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

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

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