【问题标题】:TCP Socket (Server) designTCP Socket(服务器)设计
【发布时间】:2014-12-05 21:03:26
【问题描述】:

我需要编写一个服务器应用程序,以在给定环境中接受来自不同系统的 TCP 数据报。这些消息可以是有限的消息类型列表;例如新库存(新项目记录)、库存位置更改(库存现在在位置 X)、转移请求(请将库存 ID XYZ 从位置 X 移动到位置 Y)作为一些示例。

我的问题是,为每个入站消息类型设置一个套接字(端口号)是否是个好主意,这样我就可以避免在数据报中使用某种类型的标识符来说明它是什么类型的消息,因此让我知道消息的格式以便我处理它吗?

我正在用 .NET 编写服务器,但 TCP 消息的发送者是现有的非 .NET 系统。我的计划是设置一个异步服务器,将消息保存到 MSMQ 中以供进一步处理。 (http://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx)

【问题讨论】:

  • 这肯定是一种非常不寻常的方式——假设大多数客户端需要发送不止一种类型的消息,它将需要更多的套接字开销。我不会那样做
  • 这样说:假设您必须更改路由器上 UDP 数据包的路由。您希望与路由器神秘且难以理解的命令界面交互多长时间?一个端口绰绰有余..
  • @Martin eugh - 每次添加消息时都会更改防火墙:我的系统管理员会要求用血付款

标签: .net sockets tcp


【解决方案1】:

如果您正在使用现有系统,您需要弄清楚它的message protocol 是什么,并弄清楚如何解释它并遵循现有系统使用的任何内容。任何使用套接字的程序都有某种形式的“规则”来处理消息,您需要找出这些规则是什么,并让您的服务器软件遵循这些规则。

如果您的服务器软件需要与多种类型的系统进行通信,那么每种系统类型使用不同的端口,但您不能对每种系统类型的每种消息类型使用不同的端口,因为这需要告诉现有系统更改其“消息协议”以适应您的新设计。

【讨论】:

  • 感谢您的回答,让其他人对我的想法进行事实检查很有帮助。我以前从未对套接字层通信进行编程,我通常在这种类型的通信之上工作,您(Marc 和 Martin)对它的看法非常有帮助。我正在学习我必须弄清楚如何构建信息......美好时光。我希望我能坚持使用 SQL Server 开发!我需要弄清楚如何最好地获取这些消息以便我可以处理它们(这是我用来编写的代码)。
  • 如果您正在编写新的东西,而不是尝试使用现有的东西,我建议您完全避免使用套接字,并使用一个为您提供抽象层并处理所有消息框架等的库为你。 .NET 内置的WCF library 很好,而且还有很多第三方库。
【解决方案2】:

我编写的应用程序与多个设备通信,其中只有一个是 PC 服务器,其余的是用于制造的 PLC。端口在每次发送/接收时打开和关闭。当我向 PC 服务器发送三个不同的 TCP 消息时,我最终做的是使用一个公共端口来接收来自 PC 服务器的不同 TCP 消息和默认发送端口(由 .NET Framework 选择)。关于 PLC,由于他们的设计,我需要使用一个专用端口(保持打开状态)来接收他们的 TCP 消息(每种消息类型一个专用端口 [三个不同的])和一个专用端口来发送每种消息类型因为 PLC 正在寻找绑定到一个固定端口号(同样,每个端口都必须保持打开状态)。

感谢大家的帮助。这是我的第一个 TCP 应用程序,回想起来,它非常投入(下一次我将从一个 hello world 应用程序开始!)。我现在有一台 120 吨的轨道起重机,将 30 吨的钢材(即 1,500 度)从热轧机移动到冷却场。所有设备之间的通信、我的 SQL Server 和 VB Windows 服务都运行良好(他们说 VB 是二流语言!)。

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多