This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C1294NCPDT:如何使用 TI RTO 和#39实施 TCP 客户端和服务器

Guru**** 2559270 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/933000/compiler-tm4c1294ncpdt-how-to-implement-tcp-client-and-server-using-ti-rto-s

器件型号:TM4C1294NCPDT

工具/软件:TI C/C++编译器

我们已成功实施 TCP 客户端、它正在连接到服务器并定期发送数据。

现在、我们正在同一应用程序中寻找 TCP 服务器来从服务器接收数据。

用于发送和接收的端口号不同。

您能不能建议如何在一个应用程序中实现 TCP 客户端和服务器。

请查找随附的代码以供参考、tcpHandler 作为客户端、tcpHandler2作为 Server.e2e.ti.com/.../tcpHandler.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用用户="Veeraswamy kakita8"]

    现在、我们正在同一应用程序中寻找 TCP 服务器来从服务器接收数据。

    [/报价]

     我有点困惑。 您的应用程序是 TCP 服务器(tcpHandler2)、您想连接到另一个"服务器"吗? 或者、您是否意味着要将外部客户端连接到 TCP 服务器(您的应用程序 tcpHandle2)? 通常,服务器等待来自客户端的传入连接。 我不知道如果两台服务器都在等待来自客户端的"接受"、如何相互通信。 在您详细说明您的意图后、如果您可能会看到什么、我可以将您的问题转交给我们的 NDK 专家。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的目标是将应用软件构建为 TCP 客户端以及具有两个不同端口号的 TCP 服务器。

    TCP 客户端用于使用 tcpHandler 任务将数据推送到端口编号为5000的中央服务器、工作正常

    TCP 服务器用于在端口5001上从中央服务器接收数据、创建了 tcpHandler2以从服务器获取数据、但它不接受连接返回-1

    请建议我们如何在这两种情况下配置套接字

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您的应用程序上的 TCP 服务器(tcpHandler2)是否独立工作而不使用客户端(tcpHandler)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    按照建议、禁用 tcpHandler 任务并使用 tcpHandler2任务进行测试、它不接受来自客户端的连接、也不与服务器建立连接。

    单独的 tcpHandler 任务连续向服务器发送数据,经过一段空闲(>8分钟)时间后,此任务不会运行。 此时器件甚至不会发出 ping 命令

    您能不能建议我们如何解决上述两个问题  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

      [引用 user="Veeraswamy kakita8"]根据建议,禁用了 tcpHandler 任务并使用 tcpHandler2任务进行了测试,它不接受来自客户端的连接,也不与服务器建立连接。

    您是否尝试过作为服务器应用程序的 tcpEcho 示例。 您能否尝试此示例并查看您的外部客户端是否可以连接到它?

    [引用 user="Veeraswamy kakita8">单独的 tcpHandler 任务在一段空闲(>8分钟)时间后,连续向服务器发送数据,该任务未运行。 此时、器件甚至不发出 ping 命令

    我不知道应用程序只运行8min 的问题是什么? 您是否有足够的堆栈和堆? 我需要将您的问题转交给我们的 NDK 专家。 同时、请使用 Wireshark 捕获故障时的流量。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Veeraswamy kakita8、您好!

    除了 Charles 提出的问题之外、我还想知道您的 tcpHandler2任务到底是如何失败的-1。 它似乎在 Accept()失败。 您能否修改代码以打印接受中的 errno 值? 在 while 循环之后、它看起来是这样的:

    system_printf ("Accept() errno value =%d"、errno); 

    再次请发送 Wireshark 捕获的故障案例、其中 tcpHandler 在8分钟后出现故障。

    此致、

    达尔顿

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     Accept() errno 值= 60

    connect() errno 值= 60

    当我尝试在控制台上打印消息后使用 TCP 回显示例文件并保持空闲循环时

    启动 TCP 回显示例
    系统提供商设置为 SysMin。 停止目标以查看 ROV 中的任何 SysMin 内容。
    服务状态:DHCP:已启用:000
    服务状态:DHCP:已启用:正在运行:000

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Veeraswamy kakita8、您好!

    感谢您提供这些信息、但我认为我误解了一些内容。 60转换为 ETIMEDOUT,这对 connect()很有意义,但不接受()。 最重要的是,我认为 tcpHandler2()中只有-1个错误。 我在您提供的代码中看不到任何 connect()调用。 您能帮我清除这种困惑吗?

    至于为什么 connect()会首先得到该错误代码,我认为我们需要检查 Wireshark 日志,以找出服务器没有响应的原因。

    此致、

    达尔顿