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



Teraz jest 22 gru 2024, o 05:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 25 paź 2014, o 23:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Witam wszystkich!

Ostatnimi czasy na topie jest problem wlasnej komunikacji UDP. Jest to temat dosc popularny jako , ze Mirek porusza go w BB. Wiec kazdy kto tam dochodzi staje przed problemem kiedy chcialby zrobic cos swojego.

Jak osobiscie zauwazylem wiekszosc z Was wybiera droge przez programowanie C#. No i tutaj dla niektorych moga sie pojawic problemy jesli jeszcze wczesniej nie bawili sie tym jezykiem programowania.

Dlatego postanowilem napisac poradnik dotyczacy tworzenia wlasnej aplikacji w C# wlasnie do komunikacji UDP. Bedzie on oczywiscie przeprowadzac Was krok po kroku jak osiagnac wybrany cel.

Na chwile obecna aby kazdy mogl pracowac w swoim tempie i aby mozna bylo pomoc ludziom w zrozumieniu dzialania tych mechanizmow poradnik bedzie podzielony na kilka czesci.

Kolejne czesci bede uzupelnial az opracujemy w pelni wielowatkowy program do wysylania/odbierania.

Technologia jaka wykorzystamy to Visual Studio. Ja osobiscie bede uzywac 2013 ale mozna to osiagnac rowniez korzystajac ze wczesniejszych wersji. Jedyne co moze byc problematyczne to , ze zrzuty ekranu prezentowane przeze mnie beda w j.ang wiec jak tylko bede mogl to staral sie Was naprowadzic na ta opcje w j.pol

Kolejna informacja to forma projektu. Bedziemy uzywac Windows Forms. W dzisiejszych czasach to juz jak "dziadek" ale da rade , zebysmy mogli osiagnac to czego potrzebujemy :)

Przygotowanie srodowiska do pracy

Wiec uruchamiamy nasze Visual Studio i tworzymy nasz nowy projekt. Nadajemy mu jakas "sensowna" nazwe :) i wybieramy odpowiednio
  • Aby byl to jezyk ptogramowania C#
  • Aby wersja .Net to 4.0 (ma to znaczenie jesli uzywamy cos innego niz VS2013)
  • Aby nasz projekt byl typu Windows Forms Application

Obrazek

Jako , ze chcialbym utrzymac ten poradnik w tonie funkcjonalnym pozostawiam Wam drodzy czytelnicy uklad graficzny aplikacji :) My zaczniemy od bardzo prostej rzeczy , czyli .....

Dodajemy pierwsza kontrolke

W naszej aplikacji bedziemy dzialac w odpowiedzi na jakies zdarzenie. Te najbardziej powszechne to "nacisniecie guzika". Wiec .... z Toolbox widocznego po lewej stronie wybieramy "button" i przeciagamy go na nasza aplikacje.

Obrazek

Obrazek


W ten oto sposob mamy zakonczony wstepny etap. Nastepnie ,zeby nasza aplikacja wiedziala , ze cos ma sie stac klikamy dwa razy w nasz guzik. Visual Studio automatycznie utworzy dla nas metode obslugujaca zdarzenie dla wcisnietego guzika

Jesli nie zmienialiscie Cie nazwy guzika i pozostaliscie przy domyslnej powinniscie teraz miec cos na wzor tego co w ponizszym zrzucie ekranu ... czyli poprawnie3 utworzona metode dla obslugi naszego zdarzenia.

Obrazek

Aby dalej moc pracowac i tworzyc kod musimy dodac nastepujaca referencje u gory naszego kodu , bo inaczej ani rusz :D

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


Zanim przejdziemy dalej chcialem Wam pokazac , w ktorym miejscu bede tworzyc zmienne GLOBALNE. Dlatego zawsze kiedy pozniej bede wspominac , ze tworze zmienna takiego zasiegu - zwroccie prosze uwage gdzie ona sie znajduje.

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


W tym momencie mozemy stworzyc juz zmienne , ktora wykorzystamy do wysylania naszych ramek UDP.

Zaczynamy od IPEndpoint.Potrzebna nam bedzie ona w dalszej czesci. Dzieki tej zmiennej definiujemy jaki adres IP wykorzystamy oraz na jakim porcie. Jako , ze bedziemy wysylac dane podajemy tutaj dane naszego komputera / serwera. Port 1234 jest przykladowy i moze/powienenen byc zmieniony na cokolwiek co Wam odpowiada.

Ponizsze zmienne jeszcze NIE DEFINIUJA naszego urzadzenia DOCELOWEGO ... to pozniej

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


Prosze poswiec chwilke zeby zobaczyc co sie dzieje w tym kodzie. Tworzymy nasza zmienna a nastepnie jako parametry do jej stworzenia musimy podac adres IP naszego komputera/serwera a pozniej port , ktory wykorzystamy do komunikacji UDP. Bardzo wazne na tym etapie jest by adres IP byl poprawny. W przeciwnym wypadku aplikacja niestety sie wysypie (kontrola bledow to temat rzeka na inny poradnik wiec zostawiam to w Twojej mocy)

Teraz jestesmy gotowi aby stworzyc zmienna , ktora posluzy nam do komunikacji UDP. Bedzie to takze zmienna o zasiegu GLOBALNYM i bedzie typu UDPClient

Dzieki powyzszej modyfikacji nasz kod zmienia sie troszeczke ... i wyglada nastepujaco.

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


Po tych wszystkich zabiegach przejdziemy do naszej metody obslugujacej nacisniecie naszego guzika. Przed chwila zainicjalizowalismy sobie zmienna o nazwie klient i to wlasnie ja tam wykorzystamy do wysylania danych.

Zanim jednak przejdziemy do sedna ... Pamietaj , ze bedziemy wysylac bajty :) nikt nie oczekuje , ze bedziesz w stanie wpisac bajty do wyslania. Mirek slusznie zauwaza ,ze chcemy pracowac z ASCII - dlatego wiec chcialbym na wstepie zaznaczyc , ze aby to obslugiwac w C# bedziemy korzystac z dostepnych metod opisanych ponizej....
  • Aby zamienic wartosc ze string na byte[] wykorzystamy
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
  • Aby zamienic wartosc z byte[] na string wykorzystamy
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
  • Aby sprawdzic ile byte'ow ma nasz string wykorzystamy (jest to jeden z wielu sposobow)
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Aby powyzsze zadzialalo prawidlowo musimy dodac kolejna referencje na poczatku naszego programu. Tym razem jest ona potrzebna do dzialania powyzszych funkcji.

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


Moze juz zastanawiasz sie gdzie jest cos definiujacego miejsce do ktorego wysylamy nasze ramki ? No i masz racje. Nie zdefiniowalismy takiego jeszcze.
Tak jak i wczesniej bedzie to zmienna o zasiegu GLOBALNYM i nazwie ep_destination

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


W powyzszym musisz zdefiniowac adres IP pod ktory bedziesz wysylac dane oraz port na ktorym docelowa aplikacja nasluchuje.



Teraz mamy wszystkie nasze skladniki gotowe.... wracamy wiec do miejsca wysylania naszej ramki. We wczesniej wspomnianej metodzie przygotujemy sobie nowa zmienna typu string oraz wyslemy ja wykorzystujac wczesniejsza zmienna o nazwie klient

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


No i na chwile obecna to wszystko - po uruchomieniu naszej aplikacji oraz klikniecia guzika nasza aplikacja wysle pakiet UDP pod wskazany adres oraz port.


Aby potwierdzic to sprawdzamy sobie konsolowa aplikacja ktora nasluchuje na okreslonym porcie.... no i dziala :)

Obrazek

Jednak ktos moglby powiedziec ... ale czy naprawde dziala ? Na potrzeby poradnika zrobilem zrzut ekranu programem do analizy ruchu sieciowego (takze na jego potrzeby byl to broadcast :) ale dziala tak samo )

Obrazek


No i na chwile obecna to chyba tyle jesli chodzi o czesc I. Jesli chodzi o punkty warte zwrocenia uwagi to :
  • Pracujac z obsluga sieci zapewnij sobie program do analizy ruchu sieciowego. Ja polecam WireShark'a
  • Zanim powiesz , ze cos nie dziala sprawdz czy jest ruch sieciowy / czy adresy IP sie zgadzaja oraz czy porty sa odpowiednie
  • Pracujac z AVR pomysl o tym jak rozpoznajesz czy nadeszla ramka, ktorej oczekujesz....


Mam nadzieje ,ze sie przyda. Jesli bedzie zapotrzebowanie bedziemy kontynuowac serie.

Pozdrawiam
Raf

_________________
sig off ;(



Ostatnio edytowano 27 paź 2014, o 00:06 przez RafPe, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 01:05 
Offline
Moderator
Avatar użytkownika

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

Rafał to się bardziej nadaje do działu PORADNIKI ;) kawał fajnej roboty ... dla wszystkich CeHaszowników czy tam SiSzarpowców ;)

_________________
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: 26 paź 2014, o 01:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

mirekk36 napisał(a):
to się bardziej nadaje do działu PORADNIKI


Czytalem zasady i wg tego http://forum.atnel.pl/topic6018.html#p70573 poradnik ten powinien byl tu wyladowac :)


No i zobaczymy czy sie komus przyda ;) jak tak to bedziemy szlifowac dalej ;) takie uzulepnienia dla wyobrazni poruszonej BB'kiem :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 08:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lip 2013
Posty: 420
Lokalizacja: Kraków
Pomógł: 17

Dzięki za poradnik ;) Zrobiłem tak jak opisałeś i komunikacja z avr działa :D ( miałem przez chwile kilka error'ow, ale to dlatego, bo brakło tego: using System.Net; )

_________________
GreenBook i BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 09:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

programek napisał(a):
Dzięki za poradnik ;) Zrobiłem tak jak opisałeś i komunikacja z avr działa :D ( miałem przez chwile kilka error'ow, ale to dlatego, bo brakło tego: using System.Net; )


To bardzo sie ciesze , ze tak od reki Ci wyszlo!

Jak dobrze pojdzie dzisiaj napisze poradniczek o pierwszym odbieraniu to wtedy bedziesz miec komplet :)


Sent from my iPhone using Tapatalk

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 09:20 
Offline
Użytkownik

Dołączył(a): 16 mar 2013
Posty: 157
Pomógł: 6

Dzięki RafPe! Mi też się to przyda i czekam z niecierpliwością na więcej:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 09:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

No wlasnie odbireanie sie przyda :) bo wysylanie to juz kiedys rozpracowalem na podstawie informacji z sieci ale zeby odbierac asynchronicznie to chetnie podpatrze :)
A czy sie przyda to chyba pytanie retoryczne :) wszystko sie przyda gdzie mozna sie czegos nauczyc ;) ja czekam na wiecej... Duuuzo wiecej... Chetnie wejde w c# jak ktos bedzie prowadzil za reke...
Tak samo sie w c# super parsuje dane... Mozna by to polaczyc z odbiorem po udp a wtedy zrobienie apki do sterowania po LANie to juz powinien byc pikus :)

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 09:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

eMCe2 napisał(a):
Tak samo sie w c# super parsuje dane... Mozna by to polaczyc z odbiorem po udp a wtedy zrobienie apki do sterowania po LANie to juz powinien byc pikus


Tu masz ogromna racje :D Ostatnio wlasnie robilem apke do domu do obslugi temperatury / sensorow swiatla etc i wyszla bajecznie. Wszystko po UDP. Teraz mam przerwe , bo czekam na nowy laminat zeby je dokonczyc wiec pewnie dopisze reszte poradnikow :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 10:41 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

RafPe napisał(a):
eMCe2 napisał(a):
Tak samo sie w c# super parsuje dane... Mozna by to polaczyc z odbiorem po udp a wtedy zrobienie apki do sterowania po LANie to juz powinien byc pikus


Tu masz ogromna racje :D Ostatnio wlasnie robilem apke do domu do obslugi temperatury / sensorow swiatla etc i wyszla bajecznie. Wszystko po UDP. Teraz mam przerwe , bo czekam na nowy laminat zeby je dokonczyc wiec pewnie dopisze reszte poradnikow :D

No właśnie przed chwilą czytałem o Twoich problemach z laminatem
Z przymrużeniem oka można powiedzieć że się cieszę bo dzięki temu "wysmażyłeś" taki super
poradnik i będą dalsze części ;-)
Jak najbardziej dobra robota i ja czekam na nasz ulubiony ciąg dalszy? :)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 10:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 54
Pomógł: 0

+++++++++++++++++++++++++++++++++++++++

czekam na dalsze informacje!

Edit:

problem:

"Error 2 A field initializer cannot reference the non-static field, method, or property 'SterownikUDP.Form1.ep' "

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


ostatnia linijka krzyczy.

Program Visual C# 2010 Express

_________________
Likwidator absolutny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 10:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Cytuj:
Z przymrużeniem oka można powiedzieć że się cieszę


Mnie tez ta sytuacja pozytywnie rozbawila :) Fajnie , ze ktos moze z tych porad skorzystac. W tym wypadku dzis zajmiemy sie pewnie troche zmodyfikowana wersja wysylania :D

------------------------ [ Dodano po: 1 minucie ]

Likwidator napisał(a):
+++++++++++++++++++++++++++++++++++++++

czekam na dalsze informacje!

Edit:

problem:

"Error 2 A field initializer cannot reference the non-static field, method, or property 'SterownikUDP.Form1.ep' "

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


ostatnia linijka krzyczy.

Program Visual C# 2010 Express


W liniach kody masz dwa miejsca , ktore musisz uzupelnic o poprawne adresy IP. Czyli :
  • TWOJ ADRES IP co moze byc np 192.168.1.15
  • ADRES IP DOCELOWY a tu moze byc np 192.168.1.100

Zalezy od Twojej sieci komputerowej

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 12:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

RafPe kurka nie ma mnie przykompie ale jak tylko zasiade to przeczytam calosc. Dobrze wiesz ze mnie sie przydadza poradniki C# no nie tylko mi ale dzieki i prosze o jeszcze ;)

Namazane ze smarta.

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 12:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

majster napisał(a):
Dobrze wiesz ze mnie sie przydadza poradniki C#


Majster :) dajesz znaka i robimy sesje na skaJpie :) a Ty tez dobrze wiesz , ze mnie sie przyda kazda wiedza w zakresie elektroniki jak i lutowania :) wiec mozemy sie powymieniac :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 13:54 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 135
Pomógł: 11

Witam

Świetny poradnik. Nie ma wątpliwości co do przydatności (kurde, no prawie wierszyk :D ). Bardzo dziękuję i stanowczo :D poproszę o ciąg dalszy.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2014, o 18:20 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Wielkie dzięki. Zabieram się za testy.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2016, o 21:18 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Działa świetnie. Lecę dalej :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2016, o 00:13 
Offline
Użytkownik

Dołączył(a): 02 sty 2013
Posty: 35
Pomógł: 1

Mnie interesuje tylko jedno , w jakim cel tworzysz IPEndPoint nadawcy?
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Wymuszasz port z którego będzie nadawana wiadomość ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 paź 2016, o 20:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

dziabi3 napisał(a):
Mnie interesuje tylko jedno , w jakim cel tworzysz IPEndPoint nadawcy?
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Wymuszasz port z którego będzie nadawana wiadomość ?


Tak - moglbys to zmienic np na

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


lub po prostu uzyc UdpClient. Jako , ze dosc dawno kiedy pisalem ten poradnik mysle , ze to bylo bardziej w celach szkoleniowych ;)

_________________
sig off ;(



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: 18 ] 

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