4

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

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

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

有任何想法吗?

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

4

4 回答 4

2

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

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

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


编辑:既然您说您在局域网中,请提供有关 SSDP 的更多详细信息。该协议的功能比您实际需要的要多。如果您正在考虑自己实现它,请不要完全坚持。只需让您的客户在指定端口上发送广播即可。服务器会在该端口上永久侦听,并在收到消息后使用预定义的消息进行应答。当客户端收到该答案时,它将知道发件人是有效的服务器。

于 2012-09-21T20:50:57.450 回答
1

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

于 2012-09-21T20:18:09.437 回答
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"]; 
于 2012-09-21T20:31:46.867 回答
0

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

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

这是个坏主意吗?

于 2012-09-21T21:18:25.907 回答