2013-12-09 135 views
0

我有一个需要编程接受来自在给定的环境不同的系统的TCP数据包的服务器应用程序。这些消息可以是消息类型的有限列表;例如新库存(新项目记录),库存位置更改(库存现在位于位置X),传送请求(请将库存ID XYZ从位置X移至位置Y)。TCP套接字(服务器)设计

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

我写断绝在.NET但TCP邮件的发件人是现有的,non-.NET系统。我的计划是设置一个将消息保存到MSMQ中进行进一步处理的异步服务器。 (http://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx

+0

这无疑将是一个非常不寻常的* *的方式来做到这一点 - 这将需要更多的插座开销假设大多数客户端需要发送多于一个类型的消息。我不这样做 –

+0

这样说吧:假设你必须在路由器上更改UDP数据包的路由。您希望与您的路由器的神秘和令人难以置信的命令界面交互多久?一个端口是绰绰有余.. –

+1

@马丁eugh - 每次添加一个消息时,防火墙的变化:我的系统管理员会要求在血液 –

回答

0

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

感谢大家的帮助。这是我的第一个TCP应用程序,回想起来,它涉及到了(下一次我将开始一个Hello World应用程序!)。我现在有一台120吨的轨道式起重机,将30吨从热轧机上偷取(即1,500度)的角色移动到冷却场中。所有设备之间的通信,我的SQL Server和VB Windows服务都可以正常工作(他们说VB是二流语言!)。

0

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

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

+0

谢谢您的回答付款,这是一个很大的帮助有别人其实检查了我的思维。我以前从来没有必须对套接字层通信进行编程,通常我的工作方式超出了这种类型的通信方式,您的(Marc和Martin的)角度对此非常有帮助。我正在学习,我必须弄清楚如何设计信息......美好时光。我希望我能坚持SQL Server开发!我需要弄清楚如何最好地获取这些消息,以便我可以处理它们(这是我用来编写的代码)。 – Christopher

+0

如果你正在编写新的东西,而不是尝试使用现有的东西,我会建议完全避免套接字,并与一个图书馆,给你一个抽象层,并处理所有的消息框架和不适合你。内置到.NET中的[WCF库](http://msdn.microsoft.com/en-us/library/ms731082%28v=vs.110%29.aspx)很好,并且有很多第三方库也是。 –

相关问题