1

我正在开发一个两部分的产品。一部分是运行 Windows Embedded Standard 的单板计算机上的 C# 应用程序。另一部分是运行带有 TCP/IP 堆栈的 RTOS 的嵌入式设备。这两个设备需要通过以太网电缆进行通信。这是一个点对点的连接。没有任何东西连接到任何外部网络。

我有点网络编程新手,所以我正在寻找最佳实践。我假设 TCP 套接字是最直接的方法。我想在编写任何代码并迷路之前我会得到一些建议。

保证的一件事是嵌入式设备将保持静态 IP 地址 169.254.1.1。这就是我所知道的一切。那么我需要知道什么才能让这些人联系起来?我知道子网存在问题......但这就是我的知识不足的地方。哪个应该是客户端,哪个是服务器,端口号等。

每个请求的更多信息:两端将交换一个非常简单的二进制协议。该部分已经定义,它通过 RS-232 链接工作。但是 RS-232 端口正在消失。我想用 TCP 来承载这些信息,再加上重试和错误检查等所有好东西。系统的任一端都可以发起传输。

4

2 回答 2

2

您可能想查看一些关于套接字编程的介绍,例如http://beej.us/guide/bgnet

windows 节点必须在与 rtos 设备相同的子网中配置一个网络接口,并从该子网中选择一个(不同的)IP 地址。

哪个设备是服务器并等待连接取决于您的应用程序,也可能取决于两个节点的启动顺序。例如,如果 RTOS 设备首先启动,它可能会等待 TCP 连接,直到另一端准备好。

当然,您需要在 tcp 流中使用一些协议。如果您不需要 TCP 提供的功能,可能 UDP 也可能是一种选择。这也可能会减少 RTOS 端的内存占用。

如果双方可以在没有任何硬件看门狗注意的情况下相互独立重启(或崩溃:-),请确保对方识别重启(例如使用 tcp keepalive 功能),以便您可以重新建立连接。

使用 TCP,您将获得可靠的连接,但根据您的应用程序,您可能会发现 Nagle 算法使您的消息延迟高于 RS232 设置。使用套接字上的 NO_DELAY 选项来避免这种情况。

于 2013-01-05T21:36:30.813 回答
0

我非常建议你不要自己做 TCP。它很好,但对于机器对机器接口有许多难以发现的缺陷(例如,唠叨、KA 配置、测试打包状态机)。

我们是在 2012 年。您可以使用 ZeroMQ 和类似的 [随意编辑更多更好的 IP 消息传递库]。

于 2013-01-06T13:33:48.173 回答