C服务器通过互联网与C#通信的协议是什么?

时间:2013-09-17 16:19:28

标签: c sockets dll client-server tcpclient

我可以使用什么来通过互联网与基于C的引擎进行基于C#的UI对话?

我有一个用C语言编写的数据处理引擎dll(我称之为服务器),它与用C#编写的用户界面客户端进行通信。 虽然我在这里使用术语“客户端”和“服务器”,但我只使用它们,因为基于C#的UI“与”基于“基础”进行“对话” 引擎使用P / Invoke。

客户端和服务器都只能在Windows 64位环境中运行。引擎是通用的C,可以重新编译以运行 任何操作系统,但目前(并且很可能正在进行)我只关心Windows操作系统环境。

UI控制应用程序,引擎坐下并等待来自UI的请求。通常,发动机将闲置90% 应用程序使用时的时间。一旦引擎收到来自UI的请求,它就会 处理请求的数据,并将结果返回给UI。

UI和引擎之间传递的数据量相对较少。当客户端和引擎进行通话时,数据量 由客户端发送到引擎的很小(小于1k),引擎发回(通常)少于5k的数据。

鉴于这种情况,我应该使用什么让客户端通过互联网与引擎通信?

4 个答案:

答案 0 :(得分:0)

稍微外出,但值得考虑。如果您可以将C代码转换为Python扩展(这并不困难),那么您有更多选项,您可以轻松地在它们之间进行评估和切换。 Python提供了非常好的网络库,并且很高兴与C代码交谈。

例如,如果它适合,您可以将其公开为HTTP服务(并在C#中使用WCF)。或XMLRPC。或者SOAP。或普通插座。

答案 1 :(得分:0)

这将需要更多层,因此需要更多工作,但我会考虑将您的服务器端代码包装在Web服务中。这将使与它的连接完全独立于平台,允许您在将来编写新的UI(使用任何语言),而无需额外的服务器工作。当然,这并不总是正确的举措,取决于几个因素,包括数据的类型和数量(您提到每笔交易的少量,但有多少交易?),安全问题和效率。然而,它是一种完善的平台独立的在线传输数据的方法。

答案 2 :(得分:0)

  

我可以使用什么来通过互联网与基于C的引擎进行基于C#的UI对话?

任何。选择一个协议。写下你自己的。

libcurl 跨平台并支持一系列不同的网络协议,虽然它适用于客户端(和WRT互联网协议,您通常必须区分客户端和服务器应用)。因此,您可以使用libcurl在C#应用程序中实现HTTP服务器,然后在C应用程序中实现HTTP客户端。

网络通常是一项特定于平台的任务,因此如果您不使用此类库,则必须考虑到这一点。尽管如此,如果您认为这可以使用您自己的简单协议来完成,那应该不会太困难(实际上可能更简单地WRT服务器)。如果您没有掌握如何使用现有协议(例如,使用GET和POST在HTTP中交换数据),这也可能更容易。

答案 3 :(得分:0)

您还可以查看protobufsthriftcap'n proto。可能对你需要的东西太多了,但看起来没什么害处。否则,您可以轻松地序列化为XML或JSON或其他传输语法。还有像ONC-RPC with XDR这样的旧计时器。