我正在维护一个使用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调用在数据报套接字上发送时)没有提供地址我不知道这些错误是否相关。
如果有人对可能导致此问题的原因有任何见解,或者可以采取措施来追查问题的根源,我将不胜感激。
答案 0 :(得分:1)
尝试更改此内容:
listener = New TcpListener(System.Net.IPAddress.Parse(Me.Host), Me.Port)
对此:
listener = New TcpListener(System.Net.IPAddress.Any, Me.Port)
这将允许您监听所有网络接口。
此外,如果您想要定位IPv6,则可以使用IPv6Any
代替Any
。这种选择显然会对客户端使用的地址产生影响。