【问题标题】:NAT , wcf, duplex comm... need some insightNAT、wcf、双工通信...需要一些见解
【发布时间】:2013-11-23 15:58:35
【问题描述】:

我正在研究做一个双向通信应用程序,不一定是点对点。看着使用 wcf,我很好奇这一切的内部运作。对我来说,一个大问题是 NAT / 防火墙。

我需要在客户端不进行端口转发的情况下完成这项工作。我将端口转发服务器,那很好。但是客户端需要能够连接到服务器,然后通过这个现在打开的(NAT 和防火墙)连接来回通信。

我正在编写的双工wcf示例,似乎都是使用向服务器宣布的客户端地址用于回调。假设这是一个本地局域网地址,不适用于公共连接。如果是公网地址,需要端口转发吗?

我错过了什么吗?我想建立连接,保持打开状态,并以双工方式使用它。因此,一旦客户端“拨出”,就可以通过 NAT 和防火墙限制。

此外,我不太确定 NAT 是如何实现的。如果我在端口 5555 上“打出”与 wcf 服务的连接,并收到回复,那么来自/到该 wcf 服务地址的端口 5555 是否保留在 NAT 表中?如果我要从服务器 wcf 服务发出进一步的连接,并“连接”到客户端上运行的 wcf 服务(连接到客户端公共 ip),NAT 表是否会知道它,并将流量转发到最初打孔的客户?

我的最终实现是:

远程客户端 端口转发后的服务器 管理应用程序向服务器发出命令,服务器将它们中继到远程客户端。

我是否在尝试使用 wcf 时发现错误的树?前段时间我开始使用 raw tcp 进行这项工作,但现在又开始着手这个项目,我想走 wcf 路线来解决滚动我自己的 raw tcp 通信的所有开销。

感谢您提供的任何见解。

编辑:[PING-PONG] 你好字?

【问题讨论】:

    标签: c# .net vb.net wcf client-server


    【解决方案1】:

    使用duplex services,您可以在服务器和客户端之间进行独立通信。

    关于双工服务的注意事项:

    双工模型不会自动检测服务或客户端何时关闭其通道。因此,如果服务意外终止,默认情况下不会通知该服务,或者如果客户端意外终止,则不会通知该服务。客户端和服务可以实现自己的协议,以便根据需要相互通知。

    就阻止您的服务工作的 NAT/防火墙设置而言,确实是一个值得关注的问题。但是,您的情况似乎符合客户端和服务器之间典型的双向通信设置。我不会怀疑您通过一些尝试和错误来使事情正常工作。

    如果我在端口 5555 上“断开”与 wcf 服务的连接并收到回复,那么来自/到该 wcf 服务地址的端口 5555 是否保留在 NAT 表中?如果我要从服务器 wcf 服务发出进一步的连接,并“连接”到客户端上运行的 wcf 服务(连接到客户端公共 ip),NAT 表是否会知道它,并将流量转发到最初打孔的客户?

    据我所知,这基本上就是 NAT 的工作方式。只要您的服务器的公共 IP 可以通过端口 5555 访问入站/出站流量,您应该没问题。您或许应该在 Server Fault 上研究或询问有关此问题的问题。

    我是否在尝试使用 wcf 时发现错误的树?前段时间我开始使用 raw tcp 进行这项工作,但现在又开始着手这个项目,我想走 wcf 路线来解决滚动我自己的 raw tcp 通信的所有开销。

    我认为你没有找错树。这仅取决于您要完成的工作。 WCF 将为您完成很多繁重的工作,让您专注于应用程序的核心。但是,如果您想了解有关套接字编程的更多信息,那么滚动您自己的网络 API/库将是继续做的事情。

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      相关资源
      最近更新 更多