Forum » Programiranje » [c] ne sprejme UDP paketa
[c] ne sprejme UDP paketa
slovencl ::
Naredil sem en programček (v linuxu), ki pošlje, nato pa sprejme UDP paket. Pošlje ga, pri sprejemu pa mi recvfrom vedno vrne -1, čeprav paket pride (ni pretekel timeout čas). Ni mi jasno zakaj oz. ali lahko na kak način bolj natančno ugotovim, kaj ga moti. Sem skeniral z wiresharkom, in zgleda vse ok.
Ali ima kdo idejo, kaj bi lahko bil problem?
Spodaj je kodica in pa printcrean obeh tx in rx UDP paketa.
Ali ima kdo idejo, kaj bi lahko bil problem?
Spodaj je kodica in pa printcrean obeh tx in rx UDP paketa.
#define PORT 0x6540 int sockfd; struct sockaddr_in sockaddr; memset(&sockaddr, 0, sizeof(sockaddr)); if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) { perror("socket creation failed"); exit(EXIT_FAILURE); } sockaddr.sin_family = AF_INET; // (AF_INET is used for IPv4 addresses) sockaddr.sin_port = htons(PORT); // destination port sockaddr.sin_addr.s_addr = inet_addr(device_ip); struct timeval read_timeout; read_timeout.tv_sec = 1; read_timeout.tv_usec = 0; setsockopt(soockfd, SOL_SOCKET, SO_RCVTIMEO, &read_timeout, sizeof read_timeout); // timeout // čaka na odgovor... int rx_udp_byte_count = 0; rx_udp_byte_count = recvfrom(sockfd, (char *)rx_buffer, MAXLINE, MSG_WAITALL, (struct sockaddr *) &sockaddr, NULL); printf("rx_udp_byte_count: %i \n", rx_udp_byte_count); // tole vedno javi -1
- spremenil: slovencl ()
slovencl ::
Mogoče če samo dodam. V programu imam najprej sendto, nato pa recvfrom. Nimam pa bind, ker kot razumem sendto sam binda.
misek ::
Iz man recvfrom
Ali tudi za src_addr uporabiš NULL ali pa podaj addrlen.
Napaka (errno) v tvojem primeru je pa verjetno Bad address.
Ker imaš src_addr != NULL in addrlen == NULL se src_addr ne vpiše.
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
recvfrom()
If src_addr is not NULL, and the underlying protocol provides the
source address of the message, that source address is placed in the
buffer pointed to by src_addr. In this case, addrlen is a value-result
argument. Before the call, it should be initialized to the size of the
Ali tudi za src_addr uporabiš NULL ali pa podaj addrlen.
Napaka (errno) v tvojem primeru je pa verjetno Bad address.
srus ::
"Sem skeniral z wiresharkom, in zgleda vse ok."
Meni pa ne zgleda OK.
Med oddajo in sprejemom paketa so minile štiri sekunde, ti pa imaš socket timeout nastavljen na eno sekundo. Res potrebujemo errno za več informacij.
Kateri proizvajalec pa ima MAC a2:c2:61? Kakšen privatni hack projekt?
Poglej vrstico 1985. Tam ti sprejemnik lepo odgovori, da je destination port (43321) unreachable. Tako, da paket sicer pride v IP stack, ampak ne do UDP porta. Ali lahko na sprejemniku, ko čaka na paket, poženeš sudo netstat -anp da boš videl, če ti kdo res posluša na portu 43321.
Meni pa ne zgleda OK.
Med oddajo in sprejemom paketa so minile štiri sekunde, ti pa imaš socket timeout nastavljen na eno sekundo. Res potrebujemo errno za več informacij.
Kateri proizvajalec pa ima MAC a2:c2:61? Kakšen privatni hack projekt?
Poglej vrstico 1985. Tam ti sprejemnik lepo odgovori, da je destination port (43321) unreachable. Tako, da paket sicer pride v IP stack, ampak ne do UDP porta. Ali lahko na sprejemniku, ko čaka na paket, poženeš sudo netstat -anp da boš videl, če ti kdo res posluša na portu 43321.
slovencl ::
Hvala za ideje, sem rešil: sem dodal print napake in mi javi napako 14. Potem sem zguglal in našel rešitev: https://stackoverflow.com/questions/138... Zdej dela BP :)
BTW, ta proizvajalec sem jest :)
BTW, ta proizvajalec sem jest :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] bindOddelek: Programiranje | 1456 (1234) | fiction |
» | SMTP v c -juOddelek: Programiranje | 2128 (1269) | BigWhale |
» | Delo z omrezjem v linuxuOddelek: Programiranje | 1304 (1150) | CCfly |
» | C: connect() funkcija, kako nastaviti timeoutOddelek: Programiranje | 1782 (1563) | fefko-the-bulldog |
» | Casovni problem v C/C++Oddelek: Programiranje | 1258 (1159) | sid_dabster |