通过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