我有一个客户端/服务器风格的应用程序,它使用 WCF 进行通信,一切都很好。该应用程序的一项功能是将文件从客户端机器获取到服务器(中央控制)。
中央控制请求客户端上指定文件夹中的文件列表,并使用套接字打开一个端口,供客户端连接和流式传输每个文件。它为每个文件使用不同的端口号。
这在本地测试时效果很好,但是当部署到我们的客户环境时,我开始遇到以下异常。
The requested address is not valid in its context
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at System.Net.Sockets.TcpListener.Start(Int32 backlog)
at System.Net.Sockets.TcpListener.Start()
at AMIGA.Library.TransferFile.listenerThread()
端点中的IP地址是10 。。。* 地址。我用谷歌搜索了一个答案,普遍的共识是 tcpListener 不能与外部 IP 地址绑定。没想到10 .. .* 地址是外部的。
抛出异常的代码如下:
tcpListener = New TcpListener(IEndPoint)
Dim handlerSocket As Socket
Dim thdHandler As Thread
tcpListener.Start()
RequestFile()
有没有办法我可以使用 TcpListener 来完成这项工作?如果没有,还有哪些替代方案以及实施这些替代方案的难易程度。
请记住,我们无法直接访问防火墙配置,并且更改可能需要数周才能实施。