gpt4 book ai didi

c++ - 通过 UDP 套接字传输结构的问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:07 25 4
gpt4 key购买 nike

我有以下结构:

struct Packet
{
int seqNum;
int ackNum;
int numBytes;
char* payload;
};

我想通过 UDP 发送。我目前正在这样做:

struct Packet p = {1,0,8,"testing"};
int payloadSize = p.numBytes;
char* payload = (char*)malloc(payloadSize);
memcpy(payload, &p, payloadSize);
int bytesSent = sendto(mySocket, payload, payloadSize, 0,
(const struct sockaddr *)&toNode,length);

发送的字节数是正确的——但是数据是乱码。我做错了吗?在接收器尺寸上,我做了类似的事情:

    int n;
char buffer[MTU];
bzero(buffer,MTU );
unsigned int length = sizeof(struct sockaddr_in);
struct sockaddr_in from;

n = recvfrom(mySocket,buffer,1472,0,(struct sockaddr *)&from, &length);

if (n < 0)
perror("recvfrom");
else
{
cout << "Recieved " << n << " bytes of data\n-|-\n";
char* seqNum = (char*)malloc(sizeof(int));
memcpy(seqNum, &buffer, 4);
cout << "SeqNum: " << seqNum << endl;
}

输出

Received 8 bytes of data
SeqNum: [garbage]

最佳答案

你的结构中有这个 char*...

您必须(动态地)创建一个能够包含字符串的 3 个整数和 字符 的缓冲区,将其组合 (strcpy) 并发送缓冲区。

在下面的评论中回答 OP 问题

稳定解决方案需要考虑的一些事项: 对于 2 个或更多字节的整数:您应该始终使用网络顺序,而不是“您的”系统的字节顺序。对于 char[],有几件事需要考虑:编码、长度前缀(1、2、4 字节整数)或尾随 0 字节。 -- 另见 ASN.1 或 google TLV(类型、长度、值)。 -- 您可以通过使用 XML 或 JSON 来避免所有这些。

关于c++ - 通过 UDP 套接字传输结构的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23284974/

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