【问题标题】:UDP message size differenceUDP消息大小差异
【发布时间】:2014-07-19 06:46:40
【问题描述】:

假设A向B发送一个大小为N的UDP消息

sockaddr_in to;
to.sin_family=AF_INET;
to.sin_port=htons(port);
to.sin_addr.s_addr=inet_addr(address);
sendto(sock,(const char*)buffer,N,0,(sockaddr*)&to,sizeof(to));

现在 B 收到这条消息,期望它的大小为 N_1

sockaddr from;
socklen_t length_from=sizeof(from);
recvfrom(sock,(char*)buffer,N_1,0,&from,&length_from);

当 N_1!=N 时会发生什么?

【问题讨论】:

    标签: udp sendto recvfrom


    【解决方案1】:

    当 N_1!=N 时会发生什么?

    如果接收缓冲区大于传入的数据报,则将整个数据报传输到缓冲区中,并将实际长度作为recfvrom()的返回值返回。你现在忽略它。不要那样做。

    如果接收缓冲区小于传入的数据报,则将其截断以适合接收缓冲区,超出的部分将被丢弃。返回实际传输到缓冲区的数据长度。

    【讨论】:

    • “你现在忽略了它。不要那样做。”我不会。我只是剥离了代码以专注于上下文。包装器返回值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2019-08-11
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多