【问题标题】:Get Server IP automatically to client自动获取服务器 IP 给客户端
【发布时间】:2012-09-14 07:02:38
【问题描述】:

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

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

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

有什么想法吗?

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

【问题讨论】:

  • 请确认您的意思..ABC 正在与 XYZ 聊天,ABC 应该能够看到 XYZ 的 IP,反之亦然..两者都是 LAN 连接的?
  • 不完全:ABC 和 DEF 连接到服务器 XYZ。他们都可以互相交谈,但在他们这样做之前,他们需要知道 XYZ 的 ip,以便他们可以连接到它

标签: c# networking tcp ip


【解决方案1】:

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

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

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


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

【讨论】:

  • 我应该说,没有外部连接是可能的,所以没有问题......
【解决方案2】:

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

【讨论】:

  • 在c#中如何实现动态dns?
  • ^ 确实如此。我需要一些关于该方法的指导
  • 只要在DynDns中创建一个账号,然后创建一个像mychatprogram.dyndns.org这样的主机,就可以随时更新ip自动在服务器上安装程序o手动。
  • 你可以像@pmoleri 所说的那样做,或者你甚至可以以编程方式更新动态 dns。我不能给你具体的 c# 信息(这可能取决于你最终使用的服务),但是搜索“动态 dns update c#”在 google 上给出了很多有用的结果。
【解决方案3】:

使用以下过程查找服务器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地址...?
  • 这将获得程序运行所在的服务器IP..您可以根据需要使用它
  • 但是,这仍然会在您连接之后 获得 IP。我不知道在哪里连接
【解决方案4】:

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

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

这是个坏主意吗?

【讨论】:

  • 和以前一样的问题。该 IP 地址(您在其中有一个文本文件)需要在您的应用中永久保存并进行硬编码。
  • 确定吗?即使我只是在 Windows 服务器共享的某个地方 pjt 文件? \\servername\chatserver\ip.txt ?该程序将被集中访问,而不是“安装”在特定的计算机上
猜你喜欢
  • 1970-01-01
  • 2018-12-30
  • 2015-05-21
  • 2019-01-16
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
相关资源
最近更新 更多