Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: lubokla 23. 07. 2010, 09:42:07

Název: TCP/IP Connect v C++
Přispěvatel: lubokla 23. 07. 2010, 09:42:07
Zdravím ,
chcem sa opýtať či niekto nepracoval s tcpip pripojením v c++ . Robím program na zisťovanie teplôt / vlhkosti pomocou prevodníka na sieť 485 na ktorej mám paralelne pripojené meracie zariadenia na ktoré sa pripájam. Všetko mi funguje tak ako má avšak mám problem s cyklom pri funkcii rcv() , ktorá zachytáva prichádzajúce dáta. Tieto neprichádzaju na 1 krát a preto ich skladám v cykle. Ovšem keď príjmem všetko, program sa zasekne a stojí na rcv() pretože tento stále čaká na dáta.

Vďaka za akékoľvek nápady.
Název: Re: TCP/IP Connect v C++
Přispěvatel: lubokla 23. 07. 2010, 10:35:04
Dočasne som to vyriešil použitím countra na počet cyklov a následne vypnutie po poslednom , ale takéto riešenie je nanič kedže počet cyklov nemusí a nebude vždy rovnaký.
Název: Re: TCP/IP Connect v C++
Přispěvatel: neplatné jméno 23. 07. 2010, 11:47:08
hint: nastaviť vhodný timeout TCP socketu
Název: Re: TCP/IP Connect v C++
Přispěvatel: Sten 23. 07. 2010, 14:08:00
Použij parametr O_NONBLOCK (resp. SOCK_NONBLOCK) anebo select, který ti řekne, jestli tam nějaká data čekají
Název: Re: TCP/IP Connect v C++
Přispěvatel: lubokla 23. 07. 2010, 14:48:21
Vďaka za rady , idem vyskúšať.
Název: Re: TCP/IP Connect v C++
Přispěvatel: lubokla 27. 07. 2010, 13:20:36
Vyriešil som to Timeoutom na rcv();
Vďaka za pomoc  ;)
Název: Re: TCP/IP Connect v C++
Přispěvatel: NoOne 27. 07. 2010, 17:27:58
$ man 3 recv

"Upon successful completion, recv() shall return the length of the message in bytes. If no messages are available to be received and the peer has performed an orderly shutdown, recv() shall return 0. Otherwise, -1 shall be returned and errno set to indicate the error."
Název: Re: TCP/IP Connect v C++
Přispěvatel: Ondřej Caletka 30. 07. 2010, 14:41:02
Myslím, že správně by se měl cyklus příjmu ukončit po přijetí všech dat (z dat by mělo být možné poznat jestli jsou kompletní nebo ještě něco přijde). Spoléhání na timeout se může vymstít, například při výpadku/ztrátovosti sítě.