2

我正在维护一个使用 TcpListener 来侦听传入通信的应用程序。以下代码打开连接:

Dim listener As TcpListener
_listenFailed = False
Try
    listener = New TcpListener(System.Net.IPAddress.Parse(Me.Host), Me.Port)
    listener.Start()
Catch ex As Exception
    ' an error here means the settings are likely bogus
    _listenFailed = True
    Return
End Try

While Not _stoplistening
{
    ' Accept connection
}

我遇到的问题是,当我从另一台计算机发送文件时,我收到错误“无法建立连接,因为目标计算机主动拒绝它。”

我检查了防火墙和防病毒软件,没有任何障碍。我用了

netstat -a -n

确定端口处于活动状态并正在侦听。这两个应用程序都在管理员模式下从 Visual Studios 运行,这并不意味着这会有所作为。我在接受连接代码的第一行设置了一个断点,但它永远不会运行。

我停止了应用程序并检查了 TcpListener,如果我深入挖掘,就会发现有几个错误。在 TcpListener.LocalEndpoint.IPEndPoint.IPAddress.Address.ErrorCode 出现错误 10045,“OperationNotSupported”。此外,在 TcpListener.Socket.RemoteEndPoint.ErrorCode 处出现错误 1057,“不允许发送或接收数据的请求,因为套接字未连接,并且(在使用 sendto 调用在数据报套接字上发送时)未提供地址.我不知道这些错误中的任何一个是否相关。

如果有人对可能导致此问题的原因有任何见解,或者可以采取哪些步骤来追踪问题的根源,我将不胜感激。

4

1 回答 1

1

尝试改变这个:

listener = New TcpListener(System.Net.IPAddress.Parse(Me.Host), Me.Port)

对此:

listener = New TcpListener(System.Net.IPAddress.Any, Me.Port)

这将允许您跨所有网络接口进行侦听。


此外,如果您想以 IPv6 为目标,您可以使用IPv6Any而不是。Any这个选择显然对客户端使用的地址有影响。

于 2012-08-01T12:50:15.430 回答