TCP/IP Connect v C++

TCP/IP Connect v C++
« kdy: 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.
« Poslední změna: 23. 07. 2010, 10:06:42 od Petr Krčmář »


Re: TCP/IP Connect v C++
« Odpověď #1 kdy: 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ý.

neplatné jméno

Re: TCP/IP Connect v C++
« Odpověď #2 kdy: 23. 07. 2010, 11:47:08 »
hint: nastaviť vhodný timeout TCP socketu

Sten

Re: TCP/IP Connect v C++
« Odpověď #3 kdy: 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í

Re: TCP/IP Connect v C++
« Odpověď #4 kdy: 23. 07. 2010, 14:48:21 »
Vďaka za rady , idem vyskúšať.


Re: TCP/IP Connect v C++
« Odpověď #5 kdy: 27. 07. 2010, 13:20:36 »
Vyriešil som to Timeoutom na rcv();
Vďaka za pomoc  ;)

NoOne

Re: TCP/IP Connect v C++
« Odpověď #6 kdy: 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."

Re: TCP/IP Connect v C++
« Odpověď #7 kdy: 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ě.