我目前正在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