编写一个聊天程序(就像很多人一样),我发现我希望能够让客户端自动连接到服务器。
但是,服务器的 IP 地址不会是永久的,所以我不能将其硬核到程序中
在 TCP 中,我正在寻找某种广播功能,它允许客户端知道服务器在哪里
有任何想法吗?
编辑:应该说,这将只是一个 LAN 程序 - 没有外部连接
编写一个聊天程序(就像很多人一样),我发现我希望能够让客户端自动连接到服务器。
但是,服务器的 IP 地址不会是永久的,所以我不能将其硬核到程序中
在 TCP 中,我正在寻找某种广播功能,它允许客户端知道服务器在哪里
有任何想法吗?
编辑:应该说,这将只是一个 LAN 程序 - 没有外部连接
如果您正在谈论局域网中的聊天,并且由于某种原因您不能或不想使用 DNS,您可以实现或找到 UPnP 使用的发现协议的实现。SSDP基于UDP 广播。这是,afaik,不可能通过 TCP 多播,因为 TCP 需要一个会话。
如果你想通过互联网使用聊天服务器,你别无选择,只能使用 DNS。寻找动态 dns 提供程序(我使用 selfhost.bz)。然后,在 C# 中,您可以将主机名解析为 IP 地址,如其他答案中所述。如果你有一个主机名来连接它可能足以将它传递给套接字,但是:
socket.Connect("myhostname.selfhost.bz", ...
编辑:既然您说您在局域网中,请提供有关 SSDP 的更多详细信息。该协议的功能比您实际需要的要多。如果您正在考虑自己实现它,请不要完全坚持。只需让您的客户在指定端口上发送广播即可。服务器会在该端口上永久侦听,并在收到消息后使用预定义的消息进行应答。当客户端收到该答案时,它将知道发件人是有效的服务器。
使用 DNS。在您的应用程序中解析主机名并连接到它解析到的 IP。您需要动态 DNS,因为您说 IP 不是永久的。
使用以下过程查找服务器 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"];
我有一个想法:只需让服务器将 IP 地址/端口/任何内容写入(公共)网络上某处的文本文件,客户端就可以读取文本文件
显然,如果文本文件不存在或为空,则没有服务器正在运行......
这是个坏主意吗?