logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Ethernet wysłanie pakietu UDP nie działa ...

kolton 31 Maj 2010 18:14 1605 2
  • #1 8138369
    kolton
    Poziom 16  
    Witam mam problem z wysyłaniem pakietu UDP, otóż za alokowałem pamięć na zmienna s_bufor

    s_bufor = NutHeapAlloc(1024 * sizeof(unsigned short));


    która to będzie wysyłana albo przez TCP albo UDP. Jeśli chodzi o wysyłanie za pomocą protokołu TCP niema problemu, w programie WireShark odbieram ramki.

    rc=NutTcpSend(s_tcps, s_bufor,1024 * sizeof(unsigned short));


    Problem jest z UDP

    rc=NutUdpSendTo(s_udp, udp_ip, 100000, s_bufor,1024* sizeof(unsigned short));
    if(NutUdpError(s_udp, udp_ip, 100000)==EMSGSIZE) printf("zadluga :)\n");;
    if(rc<0)
    {
        printf("Nie wysłano UDP\n");
    }
    else printf("wyslano udp\n");


    Zmienna rc przyjmuje wartość mniejsza od zera czyli nie udało się wysłać. Funkcja NutUdpError() zwraca wartość 0, co jest dość dziwne bo udaje mi się wysłać ramkę po UDP gdy ostatni argument funkcji NutUdpSendTo()
    decydujący o wielkości wysyłanego pakietu zimniejsze tzn na np. 700* sizeof(unsigned short)
    Ma ktoś jakiś pomysł dlaczego tak się dzieje ?? Po Tcp wszystko smiga
    Pozdrawiam :)
  • #2 8138859
    utak3r
    Poziom 25  
    Ramka UDP > 1024 bajty??... nie no, tak się nie robi... co zresztą sam zauważyłeś.
    UDP jest przeznaczone do wysyłania krótkich paczek. Znacznie krótszych, niż nawet owe 700 bajtów. Znacznie.
  • #3 8139075
    kolton
    Poziom 16  
    ale wielkość całego datagramu (według Wikipedii :) ) może wynosić troszkę ponad 65 tys bajtów, a ja próbuje wysłać ≈2.05 KB. Także powinno to pójść, bynajmniej tak mi się wydaje :)

    a pozatym jak by datagram był za dlugi to
    if(NutUdpError(s_udp, udp_ip, 100000)==EMSGSIZE) printf("zadluga :)\n");

    powinienem dostać wiadomość w terminalu "zadluga".
    Cos tu jest namieszane albo ja nie rozumie :)
REKLAMA