Заголовок UDP заполнен больше, чем он должен быть (42) - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь отправить данные в формате UDP (без каких-либо ошибок - просто открыть сокет и отправить данные).Используемый код выглядит следующим образом:

#include<iostream>
#include<arpa/inet.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

using namespace std;

int main()
{
    int sockfd;
    sockfd = socket(AF_INET,SOCK_DGRAM,0);
    struct sockaddr_in client;

    unsigned char* buffer = new unsigned char[1206]();
    for(auto i=0; i<1206; i++){
       buffer[i] = static_cast<unsigned char>(i);
    }

    client.sin_family = AF_INET;
    client.sin_port = htons(5005);
    client.sin_addr.s_addr = inet_addr("127.0.0.1");
    socklen_t m = sizeof(client);
    while(true){
         sendto(sockfd,buffer,1206 ,0,(struct sockaddr *)&client,m);
         cout<<"\nMessage sent...!! \n";  
     }  
}

Однако это не распознается как протокол UDP.При попытке захватить его с помощью wireshark я получаю следующий результат.(1206 байтов буферизованных данных, как и ожидалось, но 44 байта заголовка, который должен быть 42).В чем проблема с кодом?

enter image description here

1 Ответ

1 голос
/ 24 сентября 2019

Ваш код работает просто отлично (проверено на CentOS 7 с gcc 4.8.5).Метод захвата, который вы используете, удаляет уровни Ethernet, IP и UDP, оставляя вас только с полезной нагрузкой.

...