Strona 1 z 1

TCP/IP - problem z otwieraniem i zamykaniem połączenia

: 28 cze 2021 18:02
autor: tomekk
Cześć,
tworzę aplikację umożliwiającą wysyłanie i odbieranie danych po TCP/IP z wykorzystaniem notyfikatorów. Niestety w momencie wysłania danych teoretycznie dane zostają wysłane, ale połączenie ulega zamknięciu (error 66 - connection closed). Próbowałem rozwiązać problem poprzez dodanie opóźnienia w pętli "TCP sender", które pozwoli na odebranie danych przed zamknięciem połączenia.
Poniżej zamieszczam kod.
Czy problem wynika z tego, że próbuję zbyt wcześnie zamknąć połączenie zanim dane zostaną odebrane?
Wszelkie podpowiedzi mile widziane :)
Pozdrawiam

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

: 28 cze 2021 21:30
autor: Lesiu93
Cześć, trop masz dobry. Owszem błąd pojawia się przez to, że połączenie zostaje zamknięte w trakcie działania tej funkcji TCP Read w dolnej pętli. Dlaczego tak się dzieje pomimo, że dodałeś opóźnienie ? Otóż Twoja funkcja read działa w trybie Standard (tryb ustawiamy tym enumem podpiętym do funkcji) i w tym trybie funkcja czeka aż nadejdzie zadeklarowana ilość bajtów lub minie czas tzw.timeout, który również możemy zadeklarować. W tym wypadku nie ma deklaracji i jest to domyślnie 25 sekund. Dlatego Twoje 2 sekundowe opóźnienie nic nie dało. Oczywiście możesz zmienić timeout w TCP Read na krótszy jednak w tym trybie możesz mieć ciągle błąd związany z nieodczytaniem wszystkich bajtów. Deklarujesz ich do oczytania 80 a ile wysyłasz nie wiemy ale zakładam, że nie taką ilość ;)

Najprościej zmienić tryb funkcji TCP Read na Immediate i wtedy program powinien zadziałać. Mam jednak obawy co do całej konstrukcji - czy koniecznym warunkiem jest zestawianie połączenia za każdym razem kiedy chcesz coś wysłać ? :-? Pewne funkcje można by wyrzucić poza pętle i trochę zmienić "architekturę". Jeżeli masz jeszcze jakieś pytania lub chciałbyś coś tu przebudować to dawaj znać !

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

: 28 cze 2021 22:31
autor: tomekk
Dzięki, rzeczywiście zmiana na tryb Immediate pomogła. :)
Masz rację, każdorazowe ustanawianie połączenia jest nadmiarowe. Będę musiał zmodyfikować architekturę :)

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

: 29 cze 2021 12:29
autor: tomekk
Mam taką zagwostkę. Chciałbym, aby praca pętli była podtrzymana nawet w przypadku zamknięcia połączenia. Czy ma ktoś pomysł lub może zetknął się z problemem? Jakiś mechanizm umożliwiający podtrzymanie działania pętli mimo wystąpienia błędu dotyczącego zamknięcia połączenia?
Pozdrawiam

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

: 29 cze 2021 18:27
autor: Lesiu93
Spróbuj użyć funkcji Clear Error. Tutaj masz pełne kompendium wiedzy na ten temat:
https://knowledge.ni.com/KnowledgeArtic ... AS&l=pl-PL

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

: 30 cze 2021 10:22
autor: tomekk
W sprawie przebudowy programu. Chciałbym stworzyć bufor, który umożliwia podjęcie decyzji czy transmisja ma się odbyć czy nie. Czy ma ktoś pomysł w jaki sposób taki bufor można zrobić?
Pozdrawiam