Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 7 kwi 2025, o 01:04


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
    Autor Wiadomość
    PostNapisane: 17 lip 2013, o 13:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 cze 2012
    Posty: 414
    Lokalizacja: Oborniki
    Pomógł: 5

    Witam, chcę sobie napisać prosty soft, który ma obsługiwać dane przychodzące w pakietach TCP.

    Pierwszy program (serwer TCP) ma komponent ProgressBar1, na którym chcę wyświetlać dane, które przychodzą w postaci tekstu
    Kod:
    VALUE=xxx;
    .
    Drugi program ma być jego klientem. W nim mam suwak, który w zdarzeniu OnSuwakChange ma wysyłać przez TCP pakiety z aktualną wartością suwaka.

    Generalnie transmisja działa, pasek się porusza, ale problem pojawia się gdy zacznę szybciej poruszać suwakiem, wtedy program dostaje jakby sklejony pakiet, np.
    Kod:
    VALUE=34;VALUE=23
    i wyrzuca wyjatkiem jakbym chciał zamieniać "VALUE=xxx" na tym integer.
    Aktualna wersja w ogóle pokazuje, że przekroczyłem zakres operatora "[]" i już nei wiem co z tym zrobić..

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jak najlepiej coś takiego obsłużyć? Dodam, że program nic konkretnego nie robi, tylko po prostu uczę się korzystać z protokołu TCP :)

    Jakby ktoś miał zupełnie inną wizję takiego programu to śmiało pisać :)

    _________________
    Pozdrawiam:
    Mikołaj



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 14:58 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    która to wersja ? Buildera ?

    przede wszystkim poleciłbym ci na początek zabawę ale nie w TCP do takich celów a UDP. Pytam która wersja bo w wielu powinny być dostępne fajne komponenty INDY 9.x

    komunikacja bezpołączeniowa jest łatwiejsza do realizacji bez udziału wątków, a TCP czyli połączeniowa .... no można pojechać trochę na zdarzeniach ale to docelowo nie będzie działać za dobrze ...

    Co do kodu nie pomogę bo chociaż Borland mi bliski ;) to jednak ja męczyłem Delphi a tu się jeszcze nie odnajduję

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 15:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 cze 2012
    Posty: 414
    Lokalizacja: Oborniki
    Pomógł: 5

    Generalnie to ja sobie przepisuje z delphi do C++.

    Borland 6 - indy już wcześniej zainstalowałem, teraz właśnie męczę komponent IdTCPServer.

    UDP już się bawiłem :)
    TCP musi być ze względu właśnie na typ połączeniowy, tylko tak moge uzyskać połaczenie w dwie strony przy poblokowanych portach za NATem :)

    Potestowałem komponent ServerSocket i się okazuje, ze to on czasami bzdury odbiera, w sensie że nie odbiera jako cały pakiet tylko sobie czasami obcina w jednym pakiecie końcówkę, a dodaje ją do nastepnego, więc tu pies pogrzebany :)

    -- 37 minutach --

    Mirku, powiedz mi jak w komponencie INDY odczytywać na bieżąco dane? teraz mam tak, że dopiero jak się klient rozłączy to wskakuje mi cały bufor...

    _________________
    Pozdrawiam:
    Mikołaj



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 16:03 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    mikandrzej napisał(a):
    TCP musi być ze względu właśnie na typ połączeniowy, tylko tak moge uzyskać połaczenie w dwie strony przy poblokowanych portach za NATem


    W dwie strony nie uzyskasz - tzn z domciu nawiążesz połączenie gdzieś ze światem i będziesz miał po prostu ruch zwrotny zapewniony

    ale po UDP można dokładnie tak samo ;)

    nie żebym cię na siłę przekonywał do UDP ale podpowiadam

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 16:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 cze 2012
    Posty: 414
    Lokalizacja: Oborniki
    Pomógł: 5

    Jak to zrobić z UDP? tylko dlatego przesiadłem się na TCP żeby był ruch w 2 strony. Mam w domu stałe zewnętrzne IP i mogę z domem nawiązać połączenie.

    Myślałem, że to jest taka specyfika TCP/UDP :)

    Poza tym, czy aby nie jest możliwe, że jakiś pakiet może gdzieś zaginąć przy UDP? wiem, że o ile w LAN to raczej nie ma gdzie zginąć, to w internecie jednak. W dodatku ostatecznie chcę sterować z telefonu suwakami na komputerze, a zwrotny ruch potrzebny mi, żeby zaaktualizować kontrolki w telefonie.

    _________________
    Pozdrawiam:
    Mikołaj



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 17:51 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    mikandrzej napisał(a):
    Poza tym, czy aby nie jest możliwe, że jakiś pakiet może gdzieś zaginąć przy UDP? wiem, że o ile w LAN to raczej nie ma gdzie zginąć,


    takie rzeczy to były w OWYM czasie, gdy wprowadzano pierwsze sieci komputerowe, oparte jeszcze na kablach BNC ;) ... dawno i nieprawda

    no ! ... może nie do końca nieprawda ponieważ oczywiście sam standard tej warstwy stosu nie zapewnia potwierdzeń to jednak w dzisiejszych sieciach w tym także w internecie - trzeba by się bardzo postarać żeby gubić pakiety ;)

    mikandrzej napisał(a):
    Myślałem, że to jest taka specyfika TCP


    no to właśnie źle myślałeś bo na pakiet UDP można odpowiedzieć zwrotnie i dotrze ta odpowiedź dokładnie do nadawcy jak w TCP

    Tylko że ....

    trzeba wiedzieć o jednym - oczywiście że tzw Broadcasty - nie przedostaną się przez routery bo wszystkie wcześniej czy później po kilku tzw "chop'ach" zostaną wybite w pień ;)

    ale brodacastami to się można bawić w LAN'ie

    jeśli zaś chcesz w całej sieci w tym w internecie to WYSTARCZY zaadresować datagram i JUŻ ;) to wsio ...

    a po drugiej stronie użyć opcji REPLY, co spowoduje że z datagramu zostanie wykorzystana cała informacja zwrotna o nadawcy, jego IP i port ale co ważne MACADDRESS ... i informacja zwrotna potulnie dofrunie do nadawcy ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 19:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 cze 2012
    Posty: 414
    Lokalizacja: Oborniki
    Pomógł: 5

    No dobra, czyli jak mam odblokowany dajmy na to u uslugodawcy przychodzacy port tylko 21 i 80 to jestem w stanie po wyslaniu pakietu UDP z tego kompitera uzyskac odpowiedz z serwera UDP tak jak w przypadku TCP?

    Chodzi o to, ze z komorki jak przez internet wyslalem pakiet do komputera i doszedl, to jestem w stanie tez w druga strone?

    Jeszcze jedno. Ile on bedzie czekal na taka odpowiedz? Bo to wlasnie ta komorka docelowo ma odbierac dane :)

    Wysłane z mojego GT-I9500 za pomocą Tapatalk 4

    _________________
    Pozdrawiam:
    Mikołaj



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 21:14 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    mikandrzej napisał(a):
    No dobra, czyli jak mam odblokowany dajmy na to u uslugodawcy przychodzacy port tylko 21 i 80 to jestem w stanie po wyslaniu pakietu UDP z tego kompitera uzyskac odpowiedz z serwera UDP tak jak w przypadku TCP?


    A co to za różnica jaki port ? Już w Bluebooku

    http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    masz przykłady jak to uzyskać z pełnym powodzeniem od strony nawet mikrokontrolera więc chyba nie myślisz że ze strony PC'ta miałoby to stanowić jakiś problem

    Cytuj:
    Chodzi o to, ze z komorki jak przez internet wyslalem pakiet do komputera i doszedl, to jestem w stanie tez w druga strone?


    Tak, ale TYLKO jako odpowiedź na ten datagram który nadleciał (REPLY), a nie że ty sobie wymyślisz aby stworzyć nowy datagram, opatrzyć go TYLKO docelowym adresem IP - bo tak nie da rady (przynajmniej wprost) ... bo nie wprost to też dałoby radę ale zostawmy to.

    Cytuj:
    Jeszcze jedno. Ile on bedzie czekal na taka odpowiedz?


    Tyle samo co gdybyś to robił przez TCP ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 21:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2013
    Posty: 568
    Zbananowany użytkownik

    Pomógł: 31

    Może się to przyda. Napisałem kiedyś serwer TCP który służy do wyrzucania na konsole to co dostanie po sieci, używam go do wyświetlania logów z wielu maszyn w jednym miejscu. Do wysyłania po sieci można użyć netcata albo rsysloga.
    Program został stworzony na podstawie poradnika "Beej's Guide to Network Programming"
    http://beej.us/guide/bgnet/

    main.cpp
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    server.h
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    server.cpp
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Und schreien

    Spring
    Erlöse mich
    Spring
    ...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 22:23 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 cze 2012
    Posty: 414
    Lokalizacja: Oborniki
    Pomógł: 5

    Cytuj:
    Tak, ale TYLKO jako odpowiedź na ten datagram który nadleciał (REPLY), a nie że ty sobie wymyślisz aby stworzyć nowy datagram, opatrzyć go TYLKO docelowym adresem IP - bo tak nie da rady (przynajmniej wprost) ...


    No właśnie, a czy przypadkiem w TCP nie jest tak, że Klient nawiązuje połączenie z serwerem, a po nawiązaniu komunikacja już jest w obie strony?

    W ten sposób jaki przedstawiasz, musiałbym cały czas wysyłać zapytania o dane do serwera, a to mnie nie satysfakcjonuje, gdyż nie byłoby płynności wtedy. Pewnie własnie o tym wspomniałeś tu:
    Cytuj:
    bo nie wprost to też dałoby radę ale zostawmy to.




    Z tymi portami to jest taki problem, że iPlus blokuje WSZYSTKIE porty przychodzące, nie działa nawet port 80. Dlatego jestem zmuszony nawiązywać połączenie z urządzenia mobilnego, a nie stacjonarnego.

    -- 8 minutach --

    Oczywiście cały czas mówię o transmisji przez internet, bo przez LAN to żaden problem używać UDP ;)

    _________________
    Pozdrawiam:
    Mikołaj



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lip 2013, o 23:55 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    mikandrzej napisał(a):
    a czy przypadkiem w TCP nie jest tak, że Klient nawiązuje połączenie z serwerem, a po nawiązaniu komunikacja już jest w obie strony?


    Oczywiście, że tak jest i jeśli KONIECZNIE zależy na takiej funkcjonalności to jasna sprawa że trza iść w TCP

    mikandrzej napisał(a):
    Oczywiście cały czas mówię o transmisji przez internet, bo przez LAN to żaden problem używać UDP


    to dobrze rozumiem, jak mówiłem chciałem tylko zwrócić uwagę, że w UDP także można mieć informację zwrotną, a jak dobrze pomyśleć nad protokołem własnej komunikacji to nie stanowi to większego problemu.

    Jeśli jednak nie chce się iść tą drogą to jak mówiłem zostaje TCP

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lip 2013, o 09:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 cze 2012
    Posty: 414
    Lokalizacja: Oborniki
    Pomógł: 5

    Hmmm.. A ma ktoś może jakiegoś śledzia?

    Mam tu na myśli coś co w sumie nadawałoby się do działu rybnego :)

    Jakiś program nawet w delphi, który radzi sobie z pakietami TCP?


    http://4programmers.net/Delphi/INDY - tutaj jest przykład, ale jakoś to dziwnie rozwiązali, bo pakiet jest odbierany dopiero po rozłączeniu klienta, czyli żeby wysyłać strumień, musiałbym co chwilę go łączyć/rozłączać :/

    _________________
    Pozdrawiam:
    Mikołaj



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lip 2013, o 10:31 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    Może tu warto zajrzeć?

    http://delphi.about.com/od/internetintr ... 20403a.htm

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO