我有两个Windows Forms应用程序,一个充当服务器(即 Winform:Server角色),另一个充当客户端(即 Winform:Client角色)。在我的LAN设置中,有6台PC,这些PC通过一个8端口交换机相互连接,并且每台PC都具有一个以上的LAN卡。
一台PC运行[Winform:服务器角色],另外五台运行[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中找到所有正在执行的客户端。
我的意图就是这样。在同一局域网内即插即用“零配置客户端-服务器网络”。
最佳答案
好吧,他们不是。
您可以将DNS配置为yourappserver
指向您的服务器,然后让客户端连接到该服务器,但这显然有点复杂(加上硬编码值并不是实现此目的的好方法)。
您可以使用的是某种服务公告-例如通过mDNS。通过使服务器定期宣布“我是一个矮小矮胖的服务器(端口12345上的WhateverYourAppIsCalled的服务器)”,并使您的客户端监听此类请求,甚至请求它们(“是否有一个WhateverYourAppIsCalled的服务器,这里?”)。另请参见:http://en.wikipedia.org/wiki/Zero_configuration_networking#Service_discovery
(在紧要关头,您可以使服务器将其状态广播到网络上,并让客户端监听此类广播,但实际上您是在重新实现mDNS)
关于.net - 如何获取由.NET分配的IP地址和端口号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6178587/