Prosta aplikacja klient - serwer na bazie protokoªu UDP. Sprawozdanie.



Podobne dokumenty
Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP.

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

Tym razem nie skorzystamy z mechanizmu. Podglądanie pulpitu

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

4 C#. Tworzenie aplikacji sieciowych. 101 gotowych projektów

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Aplikacja wielow tkowa prosty komunikator

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

8. Konfiguracji translacji adresów (NAT)

SpedCust 5 instrukcja instalacji

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Komunikator internetowy w C#

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Instrukcja instalacji programu Plantator oraz transferu pliku danych z/do PC kolektor danych PT-20

Programowanie telefonów z Windows Phone 7, cz. 4

Pracownia internetowa w ka dej szkole (edycja 2004)

Gniazda BSD implementacja w C#

Laboratorium 10 - Web Services

PERSON Kraków

Instrukcja programu PControl Powiadowmienia.

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

Programowanie współbieżne i rozproszone

INFORMATOR TECHNICZNY WONDERWARE

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Metody Metody, parametry, zwracanie wartości

InsERT GT Własne COM 1.0

MUltimedia internet Instrukcja Instalacji

1. Program Skype można pobrać ze strony producenta :

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

using System;... using System.Threading;

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

Konfigurator opisuje proces instalacji i konfiguracji karty sieciowej bezprzewodowej D-Link DWL-520+ w systemach /2000/XP /

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego

Komunikacja z użyciem gniazd aplikacje klient-serwer

Programowanie rozproszone w języku Java

linkprog programator USB

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

Wykład 10 Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy

Instalacja i konfiguracja Symfonia.Common.Server oraz Symfonia.Common.Forte

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Wykaz zmian w programie SysLoger

Instrukcja do programu Roger Licensing Server v1.0.0 Rev. A

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

Narzędzia 4. dr inż. Tadeusz Jeleniewski

Systemy mikroprocesorowe - projekt

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

System kontroli wersji SVN

Oprogramowanie FonTel służy do prezentacji nagranych rozmów oraz zarządzania rejestratorami ( zapoznaj się z rodziną rejestratorów FonTel ).

V. Wymagania dla wsparcia projektu oraz nadzoru eksploatacyjnego... 6

raceboard-s Szybki start

Instrukcja do programu Roger Licensing Server v1.0.0 Rev. A

Programowanie i struktury danych

Aplikacja wielowątkowa prosty komunikator

Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

INFORMATOR TECHNICZNY WONDERWARE. Konfiguracja komputera klienckiego do łączenia się z serwerem IndustrialSQL

Projekt Hurtownia, realizacja rejestracji dostaw produktów

W powyższym kodzie utworzono wyliczenie dni tygodnia.

Mechanizmy pracy równoległej. Jarosław Kuchta

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

SINAMICS G120C STARTER. Tworzenie nowego projektu w trybie offline.

Kompozycja i dziedziczenie klas

Sieć komputerowa grupa komputerów lub innych urządzeo połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów, na przykład:

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

ARKUSZ EGZAMINACYJNY ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJ CEGO KWALIFIKACJE ZAWODOWE CZERWIEC 2012

Zadanie 2: transakcyjny protokół SKJ (2015)

Tworzenie aplikacji rozproszonej w Sun RPC

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

INTERFEJS S-CTT Super Chip tuning tool INSTRUKCJA OBSŁUGI

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Zanim zaczniesz. Warto ustawić kartę sieciową naszego serwera.

SINAMICS G120C STARTER. Tworzenie nowego projektu w trybie online.

VinCent Office. Moduł Drukarki Fiskalnej

Komunikacja sterownika z rodziny Micro800 z Falownikiem PowerFlex40 przy pomocy sieci DeviceNet.

Klient-Serwer Komunikacja przy pomocy gniazd

Sieci komputerowe cel

OŚWIETLENIE PRZESZKLONEJ KLATKI SCHODOWEJ

Leszek Stasiak Zastosowanie technologii LINQ w

Instalacja programu dreryk

Ukªady Kombinacyjne - cz ± I

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

db powernet Instalacja czytnika kart mikroprocesorowych (instrukcja)

Konfiguracja historii plików

Parowanie urządzeń Bluetooth. Instrukcja obsługi

KONFIGURACJA SIECIOWA SYSTEMU WINDOWS

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

Wykaz zmian w programie SysLoger

PLAN POŁĄCZENIA PRZEZ PRZĘJECIE Proabit sp. z o.o. z siedzibą w Warszawie z Linapro sp. z o.o. z siedzibą w Warszawie

Zaawansowane aplikacje WWW - laboratorium

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

Analityka SAP ERP on HANA

Umowa - wzór. Zawarta w dniu roku w Świątkach pomiędzy :

Transkrypt:

Prosta aplikacja klient - serwer na bazie protokoªu UDP. Sprawozdanie. Autor Pierwszy, Autor Drugi, Autor Trzeci Stycze«2012r Wy»sza Szkoªa Biznesu w D browie Górniczej Informatyka, I rok Studiów UM Spis tre±ci 1 Temat 2 2 Analiza i projekt 2 2.1 Algorytmy, struktury danych i zmiany w specykacji............. 2 2.1.1 Serwer................................... 3 2.1.2 Klient................................... 4 2.2 Dyskusja mo»liwych rozwi za«.......................... 4 2.2.1 Problem blokowania........................... 4 3 Specykacja zewn trzna 4 3.1 Obsªuga programu................................ 4 3.2 Komunikaty.................................... 5 4 Specykacja wewn trzna 6 4.1 Metody...................................... 6 5 Kod programu (najwa»niejsze fragmenty) 7 6 Testowanie 12 1

1 Temat W niniejszym wiczeniu nale»aªo przygotowa aplikacj typu klient - serwer z u»yciem protokoªu UDP. Ma w niej istnie mo»liwo± przesªania wiadomo±ci witaj ±wiecie z klienta do serwera, a serwer ma zidentykowa nadawc wiadomo±ci i wy±wietli j. Dodatkowo nale»a- ªo: 1. Zmodykowa program serwera, aby po uruchomieniu wypisywaª wªasny adres IP jako pierwsz pozycj na li±cie. 2. Przetestowa dziaªanie aplikacji poprzez ª czenie si wielu klientów z jednym serwerem. 3. Doda w obu procesach: klienta i serwera mo»liwo± wskazania numeru portu, przez który nast pi komunikacja. 4. Dodatkowo - aplikacja klienta ma umo»liwia wysªanie komunikatu o dowolnej tre±ci. 2 Analiza i projekt Aplikacja skªada si z dwóch cz ±ci - serwera oraz klienta. Klient, wykorzystuj c protokóª UDP przesyªa do programu serwera wiadomo± w postaci ªa«cucha znaków. Serwer po odebraniu wiadomo±ci wy±wietla j na ekranie. Aplikacja zrealizowana jest z wykorzystaniem platformy.net, w j zyku programowania C#. Wszystkie klasy, nie zastosowane, a nie zde- niowane w niniejszym wiczeniu nale» do biblioteki.net Framework. 2.1 Algorytmy, struktury danych i zmiany w specykacji Specykacja aplikacji okre±lona w instrukcji laboratoryjnej zostaªa rozwini ta o nast puj ce zachowania: 1. Zastosowano wielow tkowo± po stronie serwera. 2. Dodano przyciski, umo»liwiaj ce uruchomienie/zatrzymanie serwera. 3. Program serwera posiada wbudowanego klienta, co pozwala zrezygnowa z przygotowywania osobnej aplikacji klienta i umo»liwia symetryczn komunikacj mi dzy wieloma programami. 2

2.1.1 Serwer Dziaªanie programu serwera oparte jest o wykorzystanie klasy UdpClient. Klasa ta umo»- liwia wysyªanie i odbieranie ci gu bajtów przez wybrane gniazdo sieciowe, okre±lone przez adres IP oraz port, z wykorzystaniem protokoªu UDP. Takie rozwi zanie umo»liwia realizacj komunikacji klient - serwer, narzuca jednak pewne ograniczenia. Odbieranie danych jest realizowane przy pomocy metody UdpClient.Receive(), która jest metod blokuj c. Program wstrzymuje swoje dziaªanie w systemowej funkcji odbieraj cej dane z gniazda. W zwi zku z tym w czasie oczekiwania na dane program nie reaguje na polecenia u»ytkownika. Aby umo»liwi interakcj z programem wykorzystali±my udost pniany w platformie interfejs wielow tkowo±ci, z wykorzystaniem obiektu BackgroundWorker. Blokuj ca metoda Receive() wywoªywana jest w metodzie BackgroundWorker.DoWork(), która wykonywana jest przez dodatkowy w tek. Program wykonywany jest przez dwa w tki, z których jeden zajmuje si obsªug formatki, a drugi odbiera dane przesyªane gniazdem sieciowym. Aby umo»liwi zmian wykorzystywanego do komunikacji portu potrzebna jest mo»liwo± zatrzymania dziaªania serwera. W tek, w którym obsªugiwany jest odczyt danych z gniazda jest zatrzymany w metodzie Receive(). Dlatego te», aby go zatrzyma musimy mie mo»liwo± wyj±cia z tej metody. W prezentowanym przykªadzie zrealizowano to poprzez wysªanie komunikatu ko«cz cego dziaªanie serwera, przez klienta wbudowanego w program serwera. Klient ten jest tworzony i wywoªywany po naci±ni ciu przycisku Zatrzymaj. Zastosowanie wielow tkowo±ci wymaga implementacji delegata, który umo»liwi w tkowi realizuj cemu obsªug odbierania danych zapisywanie do pola nale» cego do w tku obsªuguj cego formatk aplikacji. Delegat ten to SetText, który umo»liwia dopisanie ªa«cucha znaków do pola w obiekcie lbconnections. Drugim, zdeniowanym w aplikacji delegatem jest ResetText, który usuwa zawarto± tekstowego pola lbconnections. Aby unikn prób wielokrotnego wywoªania metody BackgroundWorker.DoWork(), co doprowadziªoby do bª du programu, zastosowano prosty mechanizm kontrolny, polegaj cy na deaktywacji przycisku Uruchom po uruchomieniu serwera. Przycisk ten aktywowany jest ponownie po zatrzymaniu serwera. Podobnie dla przycisku zatrzymaj oraz pola numerycznego okre±laj cego port, na którym dziaªa serwer. Windows 7 standardowo nie umo»liwia korzystania z sªowa localhost jako okre±lenia sieciowego urz dzenia zwrotnego, dlatego w kodzie r cznie wprowadzono adres IPv4 127.0.0.1, wskazuj cy na to urz dzenie. 3

W Windows 7 metoda GetHostName() zwraca adres IPv6. Aby otrzyma adres IPv4, wprowadzona zostaªa metoda LocalIPadres(), która przeszukuje wszystkie adresy lokalne i zwraca pierwszy adres, który nie jest adresem IPv6. 2.1.2 Klient Realizacja programu klienta tak»e zostaªa oparta o klas UdpClient. Poniewa» jednak protokóª UDP nie wymaga potwierdzenia dor czenia wiadomo±ci, metoda Send() nie jest metod blokuj c i trudno±ci z takimi metodami programu klienta nie dotycz. 2.2 Dyskusja mo»liwych rozwi za«2.2.1 Problem blokowania Aby wyeliminowa problem blokowania w metodzie Receive() mo»naby pokusi si o zastosowanie alternatywnych, nieblokuj cych metod odbierania danych. Wówczas program nie wymagaªby dodatkowych komunikatów, wysyªanych by zatrzyma serwer oczekuj cy na pakiety UDP. Mo»na zrealizowa to przy pomocy metody ReceiveAsync(), jednak metoda ta oparta jest o zdarzenia (Events). Implementacja jej istotnie skomplikowaªaby przykªad. 3 Specykacja zewn trzna 3.1 Obsªuga programu Rysunek 1 przedstawia wygl d aplikacji klienta/serwera UDP. Skªada si z nast puj cych obiektów, pogrupowanych wierszami: 1. Adres i port serwera, do którego mo»na wysyªa komunikaty. Pole wy±wietlaj ce adres nie jest edytowalne, a zawieraj ce port - mo»na edytowa, je»eli serwer jest wyª czony. Port jest opisany liczb caªkowit P tak,»e 1 P 65535. 2. Pole wy±wietla komunikaty, które odebraª serwer. 3. Przyciski steruj ce dziaªaniem serwera: Uruchom, Zatrzymaj, Testuj i Wyczy±. Dzia- ªanie przycisków Uruchom i Zatrzymaj jest oczywiste. Przycisk Testuj wysyªa testowy komunikat do serwera. Przycisk Wyczy± usuwa zawarto± okienka komunikatów odebranych przez serwer. 4. Pola konguruj ce klienta: adres IP i port, do którego maj zosta wysªane komunikaty. Pole port docelowy przyjmuje takie same warto±ci jak pole port serwera. 4

Rysunek 1: Program klient-serwer UDP. Opis cz ±ci aplikacji w tek±cie. 1 2 3 4 5 5. Pole tre±, zawieraj ce tre± komunikatu do wysªania i przycisk wy±lij, który ten komunikat wysyªa. 3.2 Komunikaty Kliencka cz ± aplikacji nie generuje»adnych komunikatów - protokóª UDP nie wymaga potwierdzenia dor cznia wiadomo±ci, a tym bardziej jej poprawno±ci, wi c wysªanie wiadomo±ci nie generuje nigdy bª du. Cz ± aplikacji, realizuj ca funkcje serwera wy±wietla komunikaty w tym samym oknie, co komunikaty przychodz ce z gniazda sieciowego. Komunikaty te mog dotyczy uruchomienia serwera (zawieraj cy numer portu, na którym serwer jest uruchomiony), próby jego zatrzymania (i potwierdzenia zatrzymania je»eli si ono powiodªo), by komunikatem testowym (o tre±ci serwer pracuje poprawnie) lub komunikatem pochodz cym od aplikacji klienta o dowolnej tre±ci, poprzedzony numerem IP klienta. 5

4 Specykacja wewn trzna Program ze wzgl du na swoj prostot zaimplementowany jest jako publiczna klasa Form1, dziedzicz ca z klasy Form biblioteki.net Framework. 4.1 Metody W niniejszej cz ±ci zaprezentowane s najwa»niejsze metody wykorzystane w aplikacji. private void bturuchom_click(object sender, EventArgs e) Metoda obsªuguj ca uruchomienie serwera nasªuchuj cego komunikatów UDP. Uruchamia w tek Backgroundworker1 metod RunWorkerAsync(), wy±wietla komunikat o uruchomieniu serwera w oknie komunikatów aplikacji, deaktywuje przycisk uruchom i pole nport oraz aktywuje przycisk Zatrzymaj. private string LocalIPAddress() Metoda pobieraj ca adres IP serwera. Przeszukuje wszystkie adresy lokalne zwracane przez iplocalhost.addresslist i zwraca pierwszy adres, który nie jest adresem IPv4 jako ªa«cuch string. private void Form1_Load(object sender, EventArgs e) Metoda inicjuje dziaªanie aplikacji. Wy±wietla w polu adresu IP serwera odpowiedni adres IP. private void SetText(string text) private void ResetText(string text) Metody odpowiadaj za zawarto± okna komunikatów odebranych przez serwer. Pierwsza z metod do listy wy±wietlonych komunikatów dodaje tekst text. Druga usuwa zawarto± okna komunikatów. 6

private void backgroundworker1_dowork(object sender, DoWorkEventArgs e) Metoda odczytuj ca komunikaty przychodz ce do gniazda sieciowego. W niesko«- czonej p tli while(true) powtarza prób odczytu z gniazda sieciowego. Przed ka»dym odczytem sprawdza, czy aga backgroundworker1.cancellationpending ma warto± true. Je»eli tak, to ko«czy dziaªanie serwera. Je»eli nie, to p tla jest wykonywana. private void btzatrzymaj_click(object sender, EventArgs e) Metoda zatrzymuj ca dziaªanie serwera. Wywoªuj c metod BackgroundWorker1.CancelAsync() ustawia ag BackgroundWorker1.CancellationPending na true. Nast pnie wysyªa komunikat do serwera, co pozwala w tkowi serwera opu±ci blokuj c metod Receive(). Wysyªa komunikat informuj cy o zako«czeniu dziaªania serwera, deaktywuje przycisk Zako«cz i aktywuje przycisk Uruchom oraz pole port serwera. private void btwyczysc_click(object sender, EventArgs e) Metoda usuwa zawarto± okna z komunikatami odebranymi przez serwer. private void bttestuj_click(object sender, EventArgs e) Metoda wysyªa przy pomocy lokalnie utworzonej instancji klasy UdpClient komunikat testowy do serwera, korzystaj c z portu i adresu serwera. private void btclientsend_click(object sender, EventArgs e) Metoda realizuje dziaªanie klienta UDP. Lokalnie tworzy instancj klasy UdpClient i korzystaj c z gniazda sieciowego okre±lonego przez warto±ci pól port docelowy i adres docelowy wysyªa komunikat zawarty w polu tre±. 5 Kod programu (najwa»niejsze fragmenty) using System; using System.Collections.Generic; 7

using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace prostyserwerudp public partial class Form1 : Form delegate void SetTextCallback(string text); public Form1() InitializeComponent(); private void bturuchom_click(object sender, EventArgs e) backgroundworker1.runworkerasync(); lbconnections.items.add(serwer zosta uruchomiony); bturuchom.enabled = false; nport.enabled = false; btzatrzymaj.enabled = true; this.refresh(); private string LocalIPAddress() string ipv4 = ; IPHostEntry iplocalhost = Dns.GetHostEntry(Dns.GetHostName()); 8

foreach (IPAddress ipadress in iplocalhost.addresslist) if (ipadress.isipv6linklocal == false) ipv4 = ipadress.tostring(); break; return ipv4; private void Form1_Load(object sender, EventArgs e) label1.text = LocalIPAddress(); private void SetText(string text) if (this.lbconnections.invokerequired) SetTextCallback d = new SetTextCallback(SetText); this.invoke(d, new object[] text ); else this.lbconnections.items.add(text); private void ResetText(string text) if (this.lbconnections.invokerequired) SetTextCallback d = new SetTextCallback(ResetText); this.invoke(d, new object[] text ); 9

else this.lbconnections.items.clear(); private void backgroundworker1_dowork(object sender, DoWorkEventArgs e) 0); int calkport = (int)nport.value; UdpClient udpserver = new UdpClient(calkPort); SetText(na porcie:+ calkport.tostring(d)); while (true)//!backgroundworker1.cancellationpending) if (!backgroundworker1.cancellationpending) IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, Byte[] odebranedane = udpserver.receive(ref RemoteIpEndPoint); string danezwrotne = Encoding.ASCII.GetString(odebraneDane); SetText(RemoteIpEndPoint.Address.ToString() + :+ danezwrotne); else break; udpserver.close(); SetText(Serwer udp zosta pomylnie wyczony.); private void btzatrzymaj_click(object sender, EventArgs e) backgroundworker1.cancelasync(); int calkport = (int)nport.value; UdpClient udpclient = new UdpClient(127.0.0.1, calkport); 10

Byte[] sendbytes = Encoding.ASCII.GetBytes(pakiet konczacy); udpclient.send(sendbytes, sendbytes.length); // backgroundworker1.dispose(); SetText(Wysano polecenie wyczajce serwer); bturuchom.enabled = true; btzatrzymaj.enabled = false; nport.enabled = true; private void btwyczysc_click(object sender, EventArgs e) ResetText(); private void bttestuj_click(object sender, EventArgs e) int calkport = (int)nport.value; UdpClient udpclient = new UdpClient(127.0.0.1, calkport); Byte[] sendbytes = Encoding.ASCII.GetBytes(Serwer pracuje poprawnie); udpclient.send(sendbytes, sendbytes.length); private void btclientsend_click(object sender, EventArgs e) int calkport = (int)targetport.value; UdpClient udpclient = new UdpClient(targetIP.Text, calkport); Byte[] sendbytes = Encoding.ASCII.GetBytes(clientText.Text); udpclient.send(sendbytes, sendbytes.length); 11

6 Testowanie Dziaªanie aplikacji przetestowano na komputerach z zainstalowanym systemem Windows XP oraz Windows 7. Aby aplikacja mogªa si poprawnie komunikowa, niezb dne byªo wyª czenie Firewalla w zakresie portów wykorzystywanych przez aplikacje. 12