我試圖構建將通過UDP發送的數據包。但是,我沒有在接收方獲得正確的數據。C++ - 構建有報頭的分組發送它通過一個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作爲參考將數據包放在一起。
可以顯示創建套接字的代碼,以便我可以使用哪種類型的套接字? – akp
int sock = socket(AF_INET,SOCK_DGRAM,0); – Takkun