qq_41904320 2024-11-16 11:08 采纳率: 0%
浏览 24
已结题

appdesigner接收不到udp组播的数据

APPdesigner设计程序,接收upd组播的数据,显示接收不到,但是用sockertool测试是能收到数据的,

  • 写回答

31条回答

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-11-16 11:09
    关注
    获得7.50元问题酬金

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    问题:如何解决APPDESIGNER接收UDP组播数据时无法正常接收的问题? 解决方案:

    1. 确保APPDESIGNER已正确配置并启用组播功能。
    2. 检查应用程序是否使用了正确的UDP协议版本和端口号。
    3. 确认应用程序正在运行,并且没有处于停止状态或错误状态。
    4. 检查应用程序的网络连接是否稳定。
    5. 在APPDESIGNER中查看组播流量的输出,确认是否有异常流量。
    6. 如果以上步骤都无法解决问题,可能需要考虑应用程序的源地址、目的地址等参数设置是否正确,或者应用程序是否设置了适当的端口映射规则。

    代码示例:

    #INCLUDE <STDIO.H>
    #INCLUDE <STDLIB.H>
    
    INT MAIN() {
        INT PORT = 5005;
        STRUCT SOCKADDR_IN SERVER_ADDR;
        SOCKLEN_T SERVER_ADDRLEN = SIZEOF(SERVER_ADDR);
        
        IF ((SOCKET(AF_INET, SOCK_DGRAM, 0) == -1)) {
            PRINTF("FAILED TO CREATE SOCKET.\N");
            RETURN -1;
        }
        
        SERVER_ADDR.SIN_FAMILY = AF_INET;
        SERVER_ADDR.SIN_PORT = HTONS(PORT);
        INET_PTON(AF_INET, "::", &SERVER_ADDR.SIN_ADDR);
        
        IF (BIND(SOCKET, (STRUCT SOCKADDR *)&SERVER_ADDR, SIZEOF(SERVER_ADDR)) == -1) {
            CLOSE(SOCKET);
            PRINTF("FAILED TO BIND SOCKET.\N");
            RETURN -1;
        }
        
        IF (LISTEN(SOCKET, 10) == -1) {
            CLOSE(SOCKET);
            PRINTF("FAILED TO LISTEN SOCKET.\N");
            RETURN -1;
        }
        
        WHILE (TRUE) {
            STRUCT SOCKADDR_IN CLIENT_ADDR;
            SOCKLEN_T ADDRLEN = SIZEOF(CLIENT_ADDR);
            
            IF ((CLIENT_SOCK = ACCEPT(SOCKET, (STRUCT SOCKADDR *)&CLIENT_ADDR, &ADDRLEN)) == -1) {
                CLOSE(CLIENT_SOCK);
                PRINTF("FAILED TO ACCEPT CONNECTION.\N");
                BREAK;
            }
            
            CHAR BUFFER[2048];
            SSIZE_T BYTES_READ = RECVFROM(CLIENT_SOCK, BUFFER, SIZEOF(BUFFER), 0, (STRUCT SOCKADDR *)&CLIENT_ADDR, &ADDRLEN);
            IF (BYTES_READ == -1) {
                CLOSE(CLIENT_SOCK);
                PRINTF("FAILED TO RECEIVE DATA FROM CLIENT.\N");
                CONTINUE;
            }
            
            PRINTF("%S\N", BUFFER);
            CLOSE(CLIENT_SOCK);
        }
        
        CLOSE(SOCKET);
        RETURN 0;
    }
    

    这段代码演示了在APPDESIGNER中接收UDP组播数据的过程,包括初始化SOCKET、绑定SOCKET、监听、接受数据以及关闭所有连接。

    评论

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 创建了问题 11月16日