我正在尝试构建一个将通过 UDP 发送的数据包。但是,我没有在接收方获得正确的数据。
在数据包中,我想包含一个 IP 标头、UDP 标头和需要发送的数据。在这种情况下,我只想发送单词“Hello”以及随机标题信息。
char *data = "Hello";
char *packet = (char *)malloc(sizeof(struct iphdr) + sizeof(struct udphdr) + strlen(data));
struct iphdr *ip = (struct iphdr*) packet;
struct udphdr *udp = (struct udphdr*) (packet + sizeof(struct iphdr));
char *send_buff = (char *) (packet + sizeof(struct iphdr) + sizeof(struct udphdr));
ip->saddr = inet_addr("1.2.3.4");
ip->daddr = inet_addr("5.6.7.8");
ip->ttl = 5;
udp->source = 5950;
udp->dest = 5950;
udp->len = sizeof(struct udphdr);
udp->check = 0;
strcpy(send_buff, data);
sendto(sock, packet, (sizeof(struct iphdr) + sizeof(struct udphdr) + strlen(data)), ROUTER_IP);
我遇到的问题是接收端只是获取随机数据,所以我假设某处的字节数不正确。
在接收端,我让它打印出 IP 标头的一个字段作为测试,但它不正确。
char recv_buff[1000];
int recv_bytes = recvfrom(sock, recv_buff, sizeof(recv_buff));
struct iphdr *ip = (struct iphdr*) recv_buff;
cout << static_cast<int16_t>(ip->ttl) << endl;
我将数据包放在一起是错误的还是接收端有问题?我使用这个示例http://www.winlab.rutgers.edu/~zhibinwu/html/c_prog.htm作为将数据包放在一起的参考。