Mam pewne wątpliwości, związane ze sposobem działania prostego przykładu obsługi połączeń TCP za pomocą Arduino Ethernet Shielda. O ile dosyć dobrze rozumiem zasadę działania układu W5100, to umyka mi jeden "wysokopoziomowy" drobiazg.
Mamy taki oto kod:
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak widać obiekt client powoływany jest do życia w pętli głównej, przypisywana jest do niego obsługa połączenia zgłaszanego przez serwer. Następnie w instrukcji warunkowej wysyłamy do wszystkich podłączonych klientów (server.write()) znak wysłany przez wspomnianego wcześniej klienta.
Początkowo kod była dla mnie jasny. Sądziłem, że tworzymy obiekt obsługujący tylko jednego klienta, w związku z czym możliwa będzie jednoczesna obsługa tylko jednej sesji. Jak się jednak okazało, mogę podłączyć aż trzy sesje telnetu, czyli tyle, na ile pozwala ilość socketów W5100 (jeden na serwer + trzy na klienty).
Teraz zastanawia mnie jednak sprawa. W kodzie tworzymy tylko jeden obiekt o nazwie "client", a najwyraźniej Arduino i tak rozróżnia poszczególne połączenia. W tym przypadku nie ma to wielkiego znaczenia, jednak jak oprogramować jakieś poważniejsze zastosowanie, np. serwer telentu udostępniający wiersz poleceń? W przypadku obsługi kilku klientów będę musiał mieć możliwość rozpoznania, który do mnie "nadaje" w konkretnym momencie, żeby znaki lądowały w odpowiednim buforze. Będę musiał także przypisać do nich właściwe timery, które przerwą połączenie po ustalonym czasie nieaktywności. Chciałbym też mieć możliwość ustalenia limitu jednoczesnych połączeń, żeby przynajmniej jeden socket pozostał wolny dla klienta WWW (upload jakichś wartości na serwer) albo NTP.