【问题标题】:What protocol for C server to talk to C# over the internet?C 服务器通过 Internet 与 C# 通信的协议是什么?
【发布时间】:2013-09-17 16:19:27
【问题描述】:

我可以使用什么来让基于 C# 的 UI 通过 Internet 与基于 C 的引擎对话?

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

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

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

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

在这种情况下,我应该使用什么来让客户端通过 Internet 与引擎对话?

【问题讨论】:

    标签: c sockets dll client-server tcpclient


    【解决方案1】:

    我可以使用什么来让基于 C# 的 UI 通过 Internet 与基于 C 的引擎对话?

    任何东西。选择一个协议。自己写。

    libcurl跨平台并支持许多不同的网络协议,尽管它是为客户端设计的(和 WRT 互联网协议,您通常必须区分客户端和服务器应用程序)。因此,例如,您可以在 C# 应用程序中实现一个 HTTP 服务器,然后使用 libcurl 在 C 应用程序中实现一个 HTTP 客户端。

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

    【讨论】:

      【解决方案2】:

      有点偏,但值得考虑。如果您可以将您的 C 代码转换为 Python 扩展(这并不难),那么您有更多选择,您可以轻松评估并在它们之间切换。 Python 有非常好的网络库可用,并且非常乐意与 C 代码交谈。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          您还可以查看protobufsthriftcap'n proto。也许对你需要的东西来说太多了,但看起来并没有什么坏处。否则,您可以轻松地序列化为 XML、JSON 或其他传输语法。还有像ONC-RPC with XDR这样的老前辈。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多