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

use*_*411 7 .net vb.net ip port winforms

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

有一台PC运行[Winform:服务器角色],另外五台运行[Winform:客户端角色].在[Winform:服务器角色]中,我使用以下代码获取本地IP地址和端口号,[Winform:Server角色]将根据此自动分配的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
Run Code Online (Sandbox Code Playgroud)

所有[Winform:Client角色]如何在运行时知道我的[Winform:Server角色] IP地址和端口号?

我需要澄清我的意图.我目前处理我的意图可能不正确.我尝试创建一个"零配置客户端 - 服务器网络",即即插即用.服务器将知道客户端的位置,反之亦然.我知道有一个程序(即MaxiVista)已经完成了.

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

我的意图就是这样.在同一LAN内即插即用"零配置客户端 - 服务器网络".

Pis*_*3.0 3

嗯,他们真的不知道。

您可以配置 DNS,例如yourappserver指向您的服务器,然后让客户端连接到该服务器,但这显然有点复杂(加上对值进行硬编码并不是执行此操作的好方法)。

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

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