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.

[参考译文] RTOS/CC3200:多个 TCP 服务器- CC3200

Guru**** 2782575 points

Other Parts Discussed in Thread: CC3200, CC3200SDK

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/736248/rtos-cc3200-multiple-tcp-server---cc3200

器件型号:CC3200

工具/软件:TI-RTOS

您好!

我正在单个 cc3200上实施多个 TCP 服务器。 我在单个 TCP 服务器上获得成功(就像我能够正常通信一样)。

现在我想一次在不同的端口上创建两个 TCP 服务器(例如,1个在9988端口上,2个在3441端口上),那么我该怎么做? 如果我要创建,那么我如何从这两台服务器上的客户端接收数据?

提前感谢。

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

    这可以通过与一台 TCP 服务器相同的方式来完成。 您需要在两个不同的端口上打开两个侦听套接字。

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

    您好!

    我已经用同样的方法做了,但问题是……假设 TCP 服务器1已打开,我能够正常通信,但当我用相同的方式打开第二个 TCP 服务器,但在不同的套接字上,则我的第一个 TCP 服务器通信保持,直到我断开/关闭第二个 TCP 服务器。

    请注意、我在具有不同套接字的不同端口上使用了每个 TCP 服务器。

    谢谢。

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

    您需要重新设计代码。 您需要能够同时打开两个端口侦听端口并接受客户端套接字的连接。 在这种情况下、启动每个 TCP 服务器是一项单独的任务、这很有意义。 此外、如果您希望在一个时刻提供到同一端口的更多客户端连接、客户端任务也可以位于单独的任务中。

    例如、我在我的一个项目中使用:

    -网络服务器,可同时为4个客户机提供服务:
    -端口80上有1个监听任务
    -用于接受连接的4个客户端任务

    -一个客户端的 TCP 命令服务器
    -用于在端口10001监听和客户端套接字的1x 任务

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

    您好!

    这就是我在 main.c 中所做的-------- 我创建了两个不同的任务、并从每个单独的任务中调用每个 TCP 服务器函数。

    =========== main.c ====

    /*

    * ==== tcp2 ====

    *

    空 tcp2 (UARg arg0、UARg arg1)

    while (1)

            if (tcpServer2Start)

            {

         TcpServer2 (atoi ("3441"));

            }

            OSI_SLEEP (100);

    /*

    * ==== TCP ===========

    *

    空 TCP (UARg arg0、UARg arg1)

    while (1)

            if (tcpServerStart)

       {

         tcpServer(atoi("9988");

            }

            OSI_SLEEP (100);

    这是我的"tcp.c"文件

    e2e.ti.com/.../tcp.c

    仍面临上述问题。 如果我做了任何错误、请纠正我的问题。

    Vivek。

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

    我没有深入研究您的代码、但这一点很明显。 您正在使用 delay (delay)作为 delay,这是不正确的,因为它不会切换操作系统的上下文。 您需要使用 OSI_SLEEP()。 您还应该在代码的客户端部分调用 OSI_SLEEP()。

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

    我已经尝试过它。 没有成功。 请建议其他解决方案。

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

    请将更多 UART 调试日志添加到代码中、以确保代码(切换任务)正常运行。

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

    我在检查时使用 System_printf()和 System_flush()打印一些消息并进行切换。

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

    如果 UART 调试正常、您应该能够确定套接字代码中的错误。 如果您有多个套接字任务,建议在不使用 sl_Select() API 的情况下使用套接字代码。 这意味着:

    SL_Socket ()-> SL_SetSockOpt ()-> SL_Bind ()-> SL_Listen ()-> SL_Accept ()-> SL_SetSockOpt ()-> SL_Recv/SL_Send -> SL_Close ()

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

    我将在短时间内尝试并告知您。

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

    您好、Vivek、

    除了\CC3200SDK_1.3.0\cc3200-sdk\docs\simplelink_api\html\group__socket.html

    一次只能处理一个 sl_Select。 在从另一个线程调用同一命令时调用此 API 可能会导致以下两种情况之一:

    -该命令将等待(内部),直到上一条命令完成,然后执行。

    -资源不足、将返回 sl_pool_in_empty 错误。 在这种情况下、可以增加 MAX_CONOND_ACactions (导致存储器增加)、或稍后重试以发出命令。

    1月

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

    您好、Jan、

    我观察到与上述第一个场景相同的结果。 (这个)

    "-命令将等待(内部)直到前一条命令完成、然后被执行。"

    那么,有什么可能的解决方案呢?

    Vivek

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

    您有两个选项。 使用 sl_Select()在一个任务中使用两台服务器的套接字代码,或者为 TCP 服务器分离任务,但不使用 sl_Select()。

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

    我一次成功地管理了两台 TCP 服务器、并且还能够处理传入客户端的请求。

    现在、我的最终目标是在不同的端口上创建并行运行的4个 TCP 服务器。 因此、我对全部4个应用了相同的方法、但失败了。 如果我运行2台服务器,则它的工作非常完美,但对于4台服务器,它与客户端的断开连接,有时会出现绑定错误。

    您对这个问题有什么想法吗?

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

    您看到 SL_ API 中的哪些错误代码? 了解错误代码和返回位置非常重要。

    CC3200器件可同时服务器多达8个插座。 对于一台 TCP 服务器,至少需要使用两个套接字。 如果您现在可以正常使用所有套接字(未正确关闭、在套接字尚未关闭的情况下分配新套接字等)、您可能已经耗尽了所有套接字。

    1月