gpt4 book ai didi

c - udp 套接字上的多个变量

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:39 24 4
gpt4 key购买 nike

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

关于c - udp 套接字上的多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com