通过udp套接字的多个变量

我必须通过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

是的,你需要将你的消息序列化成一个字节数组。 没有接受int数组的sendto版本。 尝试这样的事情:

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。

链接地址: http://www.djcxy.com/p/61905.html

上一篇: multiple variables over udp socket

下一篇: C# socket datagram overflow