我们使用Fleck作为我们的Websockets。RemoteEndPoint给出错误的IP地址
当我们在本地测试我们的网络程序时,它一切正常。连接客户端的过程是:
- 建立TCP连接
- 发送/接收罕见的TCP报文
- 开始发送/接收UDP流服务器
的问题是活的服务器上客户端可以接收和发送TCP
消息,他们可以发送UDP消息,但他们不要收到 UDP消息。
我们已经调查了它,并且发现服务器上TCP连接的RemoteEndPoint
属性具有错误的IP地址。它似乎是我们ISP的IP地址。我们使用此IP地址尝试将UDP消息发送回客户端。由于它具有错误的IP,客户端永远不会收到这些UDP消息。
客户端的实际源IP地址必须在某处已知,因为TCP消息使其恢复正常。我已经通过Fleck源代码并打印出底层System.Net.Socket
的RemoteEndPoint
,但它一直给出错误的IP地址。
是否有人知道发生了什么问题以及我们如何才能公开客户端的实际IP地址?
这是设计。服务器和客户端正在与Internet上的路由器进行通信,后面是您的本地网络。 [NAT](http://en.wikipedia.org/wiki/Network_address_translation)负责弥合路由器与通信所指向的适当内部机器之间的差距。 UDP响应是在双工通信信道上发回的,还是服务器启动了到客户端的任何新连接? – mellamokb
@mellamokb服务器在发回它们之前等待UDP数据包从客户端到达。我有点困惑,为什么服务器可以发送TCP很好,但不是UDP,这不幸的是有点超出了我的专业知识。 –
这对于ServerFault而言更具备ontopic特性。这里没有代码问题,只是错误地设置网络。 – leppie