Elektroda.pl
Elektroda.pl
X

Search our partners

Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

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

    Code:
    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.



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


    Problem jest z UDP

    Code:
    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
    utak3r
    Level 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
    kolton
    Level 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
    Code:
    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 :)