自动获取服务器IP到客户端

时间:2012-09-21 20:15:56

标签: c# networking tcp ip

编写聊天程序(就像许多人一样),我发现我希望能够让客户端自动连接到服务器。

但是,服务器的IP地址不是永久性的,所以我不能只将它硬核到程序中

在TCP中,我正在寻找某种广播功能,允许客户端知道服务器的位置

有什么想法吗?

编辑:应该说,这只是一个局域网程序 - 没有外部连接

4 个答案:

答案 0 :(得分:2)

如果您正在谈论局域网中的聊天,并且由于某种原因您不能或不想使用DNS,则可以实现或找到UPnP使用的发现协议的实现。 SSDP基于UDP广播。由于TCP需要会话,因此无法通过TCP进行多播。

如果您想通过互联网使用聊天服务器,您别无选择,只能使用DNS。寻找动态的DNS提供程序(我使用selfhost.bz)。在C#中,您可以将主机名解析为IP地址,如其他答案中所述。如果你有一个要连接的主机名,它可能就足以将它传递给套接字了,但是:

socket.Connect("myhostname.selfhost.bz", ...


修改:因为您说您在局域网中,所以有关SSDP的更多详细信息。该协议比您实际需要的更多。如果您正在考虑自己实施它,请不要完全遵守它。只需让您的客户端在指定端口上发送广播即可。一旦收到消息,服务器就会永久侦听该端口,并使用预定义的消息进行应答。当客户端收到该答案时,它将知道发件人是有效的服务器。

答案 1 :(得分:1)

使用DNS。解析应用中的主机名并连接到它解析的IP。您需要dynamic DNS,因为您说IP不是永久性的。

答案 2 :(得分:0)

使用以下过程查找服务器IP地址

 public string GetIPAddress() 
  { 
     string strHostName = System.Net.Dns.GetHostName(); 
     IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); 
     IPAddress ipAddress = ipHostInfo.AddressList[0]; 

     return ipAddress.ToString(); 
  } 

您也可以使用

Request.ServerVariables["LOCAL_ADDR"]; 

答案 3 :(得分:0)

我有一个想法:只需让服务器在(公共)网络上的某个地方写入IP地址/端口/任何文本文件,客户端就可以读取文本文件

显然,如果文本文件不存在或为空,则没有服务器正在运行...

这是个坏主意吗?