如何获取.NET分配的IP地址和端口号

时间:2011-05-30 16:21:02

标签: .net vb.net winforms ip port

我有两个Windows窗体应用程序,一个用作服务器(即 Winform:服务器角色),另一个用作客户端(即 Winform:客户端角色)。在我的局域网设置中,有6台PC和这些PC通过8端口交换机相互连接,每台PC都有多个LAN卡。

有一台PC运行[Winform:Server角色],另外五台运行[Winform:客户端角色]。在 [Winform:服务器角色] 中,我使用以下代码获取本地IP address和端口号, [Winform:服务器角色] 将收听根据此自动分配的IP地址和端口号,对所有传入的TCP请求。

Dim Listener As System.Net.Sockets.TcpListener
Dim Client As New System.Net.Sockets.TcpClient
Dim Message As String = ""

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Listener = New System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 0)
    Listener.Start()
End Sub

所有 [Winform:客户角色] 如何在运行时知道我的 [Winform:服务器角色] IP地址和端口号?

我需要澄清我的意图。我目前处理我的意图可能不正确。我尝试创建一个“零配置客户端 - 服务器网络”,这就是插件和插件。玩。服务器将知道客户端的位置,反之亦然。我知道有一个程序(即MaxiVista)完全做到了。

MaxiVista有两个应用程序,即服务器和客户端。用户只需在指定为服务器角色的PC中执行服务器应用程序,并在另一台指定为客户端角色的PC中执行客户端应用程序。然后,服务器将能够在同一LAN中找到所有正在执行的客户端。

我的意图就是这样。在同一局域网内即插即用“零配置客户端 - 服务器网络”。

3 个答案:

答案 0 :(得分:3)

嗯,他们不是,真的。

您可以为例如配置DNS yourappserver指向您的服务器,然后让客户端连接到该服务器,但这显然有点复杂(加上硬编码值不是一个很好的方法)。

您可以使用的是某种服务公告 - 例如通过mDNS。这是通过让服务器定期宣布“我是一个小服务器,短而粗壮(WhateverYourAppIsCalled在端口12345上的服务器)”以及您的客户端来监听此类请求,甚至是请求它们(“是否有服务器WhateverYourAppIsCalled around这里?”)。另见:http://en.wikipedia.org/wiki/Zero_configuration_networking#Service_discovery

(在紧要关头,您可以让服务器向网络广播其存在并让客户端监听此类广播,但之后您基本上重新实现了mDNS)

答案 1 :(得分:2)

客户端无法自动计算出服务器的IP地址。以下是解决问题的一些选择:

  • 每个客户端都有某种初始化数据,告诉它服务器所在的位置(可能是数据库,ini文件等)。这些数据可能会存储在本地。
  • 服务器具有某种初始化数据,可以告诉客户端所在的位置。然后,服务器可以使用该信息以某种方式直接与客户端通信,或者将自己的IP地址写入客户端正在查找的客户端计算机上的文件/数据库中。

答案 2 :(得分:2)

从知名机器名称到IP地址的映射由命名服务完成,DNS是标准服务。如果无法使TcpClient.Connect(string,int)正常工作,请与LAN管理员联系。

您无法让服务器像这样开始侦听端口0。它必须是众所周知的端口号,否则客户端将不知道在Connect()调用中使用哪个端口号。选择一个数字,任何数字,超过一千。像1667.如果与使用相同端口号在该机器上运行的另一个TCP服务器发生冲突,那么您将发现。在客户端上,服务器名称和端口号属于设置,以便LAN管理员可以轻松更改。