在C中未获取正确的值接收/解包缓冲区

我目前正在C中的客户端/服务器上工作,并尝试创建/接收数据包。发送完数据包并尝试对其进行解析后,我最终得到了奇怪的值。我环顾四周,求助于来到这里。

#include <stdint.h>
struct header{
        uint32_t seqno, ackno;
        uint16_t connid, flags;
};

客户端格式和发送(选择随机值进行测试)

    struct header args;
    args.seqno = 12345;
    args.ackno = 10001;
    args.connid = 1;
    args.flags = 0;
    /*strcpy(args.payload, "Did it work?...");*/

    htonHeader(args, buffer);
    printf("%s\n", buffer);
    sendto(sockfd, buffer, 524, 0, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

}

void htonHeader(struct header h, char buffer[524]){
    uint32_t u32;
    uint16_t u16;
    uint8_t u8;

    u32 = htonl(h.seqno);
    memcpy(buffer+0, &h.seqno, 4);
    u32 = htonl(h.ackno);
    memcpy(buffer+4, &u32, 4);

    u16 = htons(h.seqno);
    memcpy(buffer+8, &u16, 2);
    u16 = htons(h.flags);
    memcpy(buffer+10, &u16, 2);
}

服务器接收并解析

recvfrom(sockfd, buffer, 524, 0, (struct sockaddr*)&si_other, &addr_size);

struct header packet;
ntohHeader(packet, buffer);
printf("Seqno: %d\n Ackno: %d\n Connid: %d\n Flags: %d\n", packet.seqno,packet.ackno, packet.connid, packet.flags);}



void ntohHeader(struct header h, char buffer[524]){
    memcpy(&h.seqno, buffer, 4);
    memcpy(&h.ackno, buffer+4, 4);
    h.seqno = ntohl(h.seqno);
    h.ackno = ntohl(h.ackno);

    memcpy(&h.connid, buffer+8, 2);
    memcpy(&h.flags, buffer+10, 2);
    h.connid = ntohs(h.connid);
    h.flags = ntohs(h.flags);}

这就是我得到的输出。看到什么?

序列号:16   阿克诺:0   康尼德:26348   旗帜:53960