【问题标题】:Talk back to a device behind firewall over established connection - how?通过已建立的连接与防火墙后面的设备对话 - 如何?
【发布时间】:2012-11-14 00:54:56
【问题描述】:

防火墙后面的设备与我的服务器建立并维护 套接字连接。我通过已建立的连接与设备对话。这种模式叫什么?我在哪里可以获得更多信息、.net 代码示例等?

背景 - 我们的设备只有串行端口,我们在客户现场使用 GSM 调制解调器。然后,我们从办公室调用每个调制解调器来检索数据。问题是移动宽带(GPRS/UMTS 等),尤其是用于少量数据的 M2M-one 很便宜。电路交换数据(呼叫调制解调器和传真)价格昂贵,在某些国家/地区已弃用、不受支持甚至不可用(泰国)。所以我们正在反转模式并在调制解调器中使用 GPRS+TCP 套接字功能。

我已经在我的“自动数据检索器”中实现了此功能,用于发送定义的数据包(例如“给我你的序列号”)并期待对我的请求的响应(等到整个响应已到达已知字节数和/或已知停止序列)。

我想要实现的目标类似于串行端口(轮询缓冲区并读取所有新字节)或事件模型(SendBytes / NewBytesReceived)或者更现代的东西(反应式扩展?) .

我的最终目标是一个小型服务器,它只做这个,允许多个程序连接到远程设备。然后我可以运行一个“配置”应用程序来配置设备 98,同时允许“自动数据检索器”与设备 13、18 和 27 一起工作。

额外问题 - 你会给这个服务器/模式取什么名字?

【问题讨论】:

  • Socket 通信是可能的,并且假设客户端进行了初始连接,那么只要保持连接,防火墙就不会出现问题。搜索 .net Client/Server 可能是一个不错的起点。#

标签: .net tcp


【解决方案1】:

防火墙经过编程,因此它们会将设备启动的任何 tcp 连接的答案转发回原始设备。

防火墙后面的设备必须始终是发起连接的设备。

服务器很简单,只需等待预定义端口中的连接,然后创建一个新线程来处理每个新的传入连接。这样服务器可以同时处理多个连接。

请记住,如果连接长时间处于空闲状态,防火墙可能会失去与原始设备的关联。您可以实现保持活动机制,或者在每次设备空闲时关闭连接。

【讨论】:

  • 是的,这正是我已经实现的。有一个协议,允许设备检测连接已关闭并重新建立连接。我正在寻找建议/指针/代码示例以对其进行模块化,使其能够作为单独的服务器运行并为多个外部程序提供连接性,并使代码现代化,从回调地狱中逃脱并允许发送和接收恒定的字节流,不仅仅是当前代码中的请求/响应。
  • 此外,出于可扩展性的原因,我真的不想为每个连接运行一个线程。我计划有大约 1000 个连接,每个连接的流量都很少,但它们会全天候连接。
  • 好的,看来您需要使用非阻塞 tcp api。我对此知之甚少。也许你应该发布一个新的问题。
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 2015-04-17
相关资源
最近更新 更多