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.

[参考译文] CC3220SF-LAUNCHXL:UDP 客户端不能接收到我为 MATLAB 和 Launchpad 编写的指定端口号中的 MATLAB 服务器

Guru**** 2589245 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/982913/cc3220sf-launchxl-udp-client-doesn-t-receive-from-matlab-server-in-the-specified-port-number-i-wrote-for-matlab-and-launchpad

器件型号:CC3220SF-LAUNCHXL
我在 cc3220 launchpad (客户端)和 MATLAB (服务器)之间交换数据、Launchpad 将数据发送到 MATLAB、工作正常、但无法从 MATLAB 接收数据。 
我在 Wireshark 中注意到、Launchpad 生成的随机端口号与代码中为其选择的端口号不同、当我在 MATLAB 的写入函数内写入该端口时、它可以正常工作、并且可以正常工作
LaunchPad 可以从 MATLAB 接收数据、这意味着在作为客户端工作时、自动为 Launchpad 生成端口号中有一些内容、我的问题是如何强制 Launchpad 通过端口号接收数据
它在我的代码中为它指定了什么?


Int16_t 状态; 非时钟使能= 1; 端口号= 5001; SL_Task (NULL); if (get_status_bit (Status、status_bit_connection)) { if (!SocketOped) { //打开 UDP 套接字 clientfd= sl_Socket (sl_AF_iNet、sl_sock_DGRAM、0); if (0 > PacketSocket) { UART_PRINT ("创建套接字时出错); } //将套接字的设置设置为非阻塞套接字 return= sl_SetSockOpt (PacketSocket、sl_SOL_Socket、sl_SO_NONBLOCKING、(_u8*)& BlockingOption、sizeof (BlockingOption)); if (return < 0) { UART_PRINT (将 UDP 服务器套接字启动到非阻塞套接字时出现错误)\n\n"\} SockSettings.Sin_Family = SL_AF_iNet; SockSettings.Sin_port = sl_Htons (PortNumber);//5001 SockSettings.sin_addr.s_addr = sl_Htonl (SocketServerIpAddr); //循环,直到客户端成功连接到服务器 UDP 套接字 状态= SL_ERROR_BSD_EALREADY; while (0 >状态) { SL_Task (空); status= sl_Connect (clientfd、(SlSockAddr_t *)和 SockSettings、sizeof (SlSockAddrIn_t)<0); 如果 (状态< 0) { UART_PRINT ("连接到服务器 UDP 套接字时出错");} } } TX = sl_Sendto (clientfd、buff、buffLen、0、(SlSockAddr_t *)和 SockSettings、 len); RX = sl_Recvfrom (clientfd、buff、buffLen、0、(SlSockAddr_t *)和 SockSettings、 (SlSocklen_t *)&len);

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

    您好!

    不可以。 UDP 是一种无连接协议,因此您无法使用 sl_Connect() API。 API sl_Connect()用于 TCP 而不是 UDP。

    在互联网上、您可以找到许多文章 UDP 的工作原理、包括使用 BSD 套接字进行 UDP。

    1月

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

    您好!

    正如 Jan 指出的那样、UDP 是无连接的并且直接使用 sl_SendTo()或 sl_SendTo()、而不是 sl_Connect() API。

    您的 MATLAB 代码是打开 TCP 套接字、还是打开 UDP 套接字? 如果它使用 UDP、那么是否注释掉 sl_Connect()代码并且只使用 sl_SendTo()/sl_Recvf()起作用?

    此致、

    Michael

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

    您好、Jan、

    我尝试绑定客户端(launchpad)、 并在 SockSettings1中在 sl_connect 函数之前为其提供端口号、这意味着我必须通过绑定客户端从服务器接收来强制 Launchpad 接收特定端口号。

    感谢你的帮助

    莫斯塔法

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

    您好、Michael、

    当我删除 sl_connect()时,客户端也不起作用,仍然生成随机端口号。  客户端生成动态端口号,即使我正在将 包含我 的端口号的 SockSettings 传递到 recvform()中。

    因此、我尝试绑定客户端并给他另一个端口号、我强制 Launchpad 使用我的端口号来接收。

    此致、

    莫斯塔法