首页 文章

c - udp socket上的多个变量

提问于
浏览
0

我必须通过udp套接字发送多个变量类型:int数组和char . 我想在同一个udp数据包上发送它 . 什么是标准解决方案?将所有内容转换为字节或类似内容?

我正在使用:sendto(int sockfd,const void * buf,size_t len,int flags,const struct sockaddr * dest_addr,socklen_t addrlen);

我的代码是这样的:

int buffer[100];
char flag = '0';
int i = 0;

for (i = 0; i < 50; i++) {
    buffer[i] = i * 2;
}

if (sendto(s, buffer, sizeof(buffer), 0, (struct sockaddr *) &si_client, slen) == -1 ){
    //error
}

//rest of the program

1 回答

  • 2

    是的,您需要将消息序列化为字节数组 . 没有 sendto 的版本接受 int 数组 . 尝试这样的事情:

    int arr[] = {1, 2, 3};
    char str[] = "hello";
    size_t buflen = sizeof arr + sizeof str;
    
    char* buf = malloc(buflen);
    if (NULL == buf)
        abort();
    unsigned i = 0;
    for (unsigned j=0; j<3; ++j)
    {
        buf[i++] = (arr[j] >> 24) & 0x000000ff;
        buf[i++] = (arr[j] >> 16) & 0x000000ff;
        buf[i++] = (arr[j] >>  8) & 0x000000ff;
        buf[i++] = (arr[j] >>  0) & 0x000000ff;
    }
    strcpy(&(buf[i]), str);
    
    if (sendto(s, buffer, sizeof(buffer), 0, (struct sockaddr *) &si_client, slen) == -1 ){
        //error
    }
    

    请注意,您的消息仍可能作为多个数据包发送,例如,如果其大小超过路径MTU .

相关问题