使用TcpChannel类上的端口号范围

时间:2010-07-09 15:40:14

标签: c# tcp remoting

是否可以在TcpChannel类上指定端口号范围,而不是固定端口或随机端口号。

我们目前使用固定端口号作为远程处理通道,但现在因为应用程序部署在Citrix环境中,我们需要使用一系列端口号来适应其安全环境。使用零作为端口号分配一个随机端口,然后被防火墙阻止,因此寻找可以指定一系列端口数字的东西(例如9000 - 9500)

亲切的问候 诺尔

3 个答案:

答案 0 :(得分:2)

下面是一个vb.net函数,它将从一系列端口号返回下一个可用端口,以便您可以使用下一个可用端口打开套接字或执行所需的任何操作。

我并没有尝试在同一个端口号上打开多个客户端,也没有尝试像这样疯狂的事情。我只需要确定哪些端口号可供使用,并指示客户端使用该端口号。这适用于Citrix环境,其中多个客户端尝试从不同的用户会话打开相同的端口;使用下面的代码可以解决问题。

''' <summary>
''' Routine to get the next available port number from a range of port numbers
''' </summary>
Private Function GetPortNumberFromRange(ByVal startPort As Integer, ByVal endPort As Integer) As Integer
    Dim ipProperties = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
    Dim tcpInfos = ipProperties.GetActiveTcpConnections()
    Dim portRange = Linq.Enumerable.Range(startPort, endPort).ToList
    For Each tcpInfo In tcpInfos
        portRange.Remove(tcpInfo.LocalEndPoint.Port)
    Next
    If portRange.Count > 0 Then
        Return portRange(0)
    End If

End Function

答案 1 :(得分:0)

AFAIK,您不能在配置文件中指定它,但它当然可以在代码中完成。

答案 2 :(得分:0)

频道(包括TcpChannel)用于侦听单个端口。如果你想收听多个端口,你将需要多个频道来支持它。