Programowanie Systemów Rozproszonych Laboratorium 1 Wprowadzenie do Visual Studio i C# Paweł Paduch [email protected] 11-03-2019 Rozdział 1 Wstęp 1.1 Na początek Pierwsze zajęcia laboratoryjne z Programowania Systemów Rozproszonych mają charakter wprowadzający. Na początku studenci po otrzymaniu od prowadzącego loginów i haseł zostaną poproszeni o zalogowanie się. Pierwsze logowanie powinno odbywać się pod systemem Windows. W okienku logowania należy zaznaczyć „Zaloguj do: KIN”. Lub użyć przedrostka w nazwie użytkownika np. KIN\12345 Po wprowadzeniu pierwszy raz hasła należy hasło zmienić na swoje indywidualne. Hasło należy zapamiętać (lub nawet zapisać) gdyż indywidualny login i hasło będą używane przez cały semestr. Zalogowani studenci mają swoją przestrzeń na dysku sieciowym Z: tam też proszę zamieszczać swoje prace. 1.2 Uczestnictwo • Zajęcia laboratoryjne są obowiązkowe. • Każdy student ma obowiązek wpisać się na listę obecności, co będzie potwierdzeniem jego uczestnictwa na zajęciach. • Spóźnienie powyżej 15 min. traktowane jest jako nieobecność. • Odrabiać można jedynie nieobecności pisemnie usprawiedliwione (np. zwolnienie lekarskie, pismo urzędowe). • Usprawiedliwienie należy okazać niezwłocznie (pierwsze laboratoria po okresie nieobecności) i umówić się na termin odróbczy. Usprawiedliwienia typu: „musiałem być w pracy”, „uciekł mi autobus/pociąg/taksówka”, „źle się czułem”, „nie miałem z kim dziecka zostawić” nie będą honorowane. • Zgodnie z regulaminem studiów „Nieobecność studenta nawet usprawiedliwiona, na więcej niż 1/3 zajęć, może być podstawą do niezaliczenia tych zajęć.” Kolejne 3 nieobecności będą zgłaszane do dziekana w celu weryfikacji listy studentów. 1 1.3 Zasady zaliczenia Zaliczenie uzyska student, który w ciągu całego semestru uzyskał sumarycznie przynajmniej połowę punktów przewidzianych do zdobycia. W przypadku kilku prowadzących punkty te będą przeliczane wagowo w zależności jaką część zajęć dany prowadzący wykonał w ciągu semestru. Na zaliczenie laboratorium składać się będą 3 elementy: • Na każdych zajęciach laboratoryjnych studenci wykonują zadania przedstawione przez prowadzącego. Zadania te są oceniane w skali od 0 do 5 punktów. • Po każdych laboratoriach student powinien przesłać sprawozdanie z zajęć. Sposób przekazania i termin ustala prowadzący. Za prawidłowe sprawozdanie student może otrzymać maksymalnie 1 punkt. • Podczas zajęć mogą odbywać się sprawdziany weryfikujące nabytą wiedzę. Ocena ze sprawdzianów to około 50% całkowitej oceny. 1.4 Poprawy Student, który nie uzyskał zaliczenia w trakcie trwania semestru może się o nie ubiegać dwukrotnie w trakcie trwania sesji egzaminacyjnej, w tym raz podczas sesji poprawkowej. Poprawa będzie polegała na napisaniu sprawdzianu (przynajmniej na połowę punktów) oraz wykonaniu części praktycznej. 1.5 Moodle Każdy student powinien mieć założone konto na wydziałowej platformie edukacyjnej http://www.weaii-moodle.tu.kielce.pl/ Hasła do kursu poda prowadzący. 1.6 zasady korespondencji Zasady korespondencji opisałem pod adresem https://achilles.tu.kielce.pl/portal/Members/332bd2d158a24964b2b98a7fc2879842/ogolnezasady-korespondencji-mailowej Należy przede wszystkim pamiętać o: • prawidłowej konfiguracji programu pocztowego tak aby w polu nadawca widniało imię i nazwisko • zamieszczeniu tematu maila łącznie z podaniem nazwy grupy np. 1ID21A • podaniu treści maila wraz z podpisem 1.7 Sprawozdania • Po każdych zajęciach laboratoryjnych należy przesłać sprawozdanie (chyba, że prowadzący ustali inaczej). 2 • Czas na oddanie sprawozdania jest do końca (czyli do godziny 23:59:59,99) następnego dnia roboczego. • Sprawozdanie powinno być w formie .odt (plik Open/Libre Office). • W sprawozdaniu umieszczamy jedynie fragmenty kodu (nie przekraczające strony). Kod o większej objętości należy wysłać jako osobne załączniki. W szczególności można wysłać cały projekt wcześniej skompresowany ZIPem. • Sprawozdanie ma być formą dokumentu co zrobione zostało na zajęciach, nie pracą domową. Punkty, które nie zostały wykonane na zajęciach takie też pozostają w sprawozdaniu. 1.8 Prace domowe Jeżeli na kolejne zajęcia jest zadana praca domowa (np. przemyśleć komunikację, zaprojektować klasę transportową itp.), należy ją także przesłać na maila zgodnie z zasadami korespondencji najpóźniej na 2 dni przed planowanymi zajęciami. 1.9 Zasady podczas pisania sprawdzianów Sprawdziany będą przeprowadzane na platformie moodle. Maksymalny czas przeznaczony na sprawdzian zależny będzie od jego zawartości, zwykle kilka minut. Na pytania opisowe należy udzielać odpowiedzi precyzyjnie (sprawdzane są z automatu). Pytania testowe są wielokrotnego wyboru. Nie ma punktów ujemnych. Przed rozpoczęciem testu należy: • wyłączyć i schować telefony komórkowe • usunąć z uszu, szyi czy głowy i schować wszelkiego rodzaju słuchawki (osoby niedosłyszące proszę zgłosić fakt posiadania aparatu słuchowego, na czas testu aparat ten nie będzie potrzebny) • usunąć wszystkie zbędne rzeczy z biurka (portfele, długopisy, kartki, zeszyty, torebki, kalkulatory, napoje, jedzenie, maskotki itp.). • zamknąć lub odłożyć w miejsce niedostępne wszelkie torby i plecaki. Podczas testu nie jest dozwolone: • korzystanie z Internetu (za wyjątkiem strony moodle) • korzystanie z innych aplikacji niż przeglądarka internetowa (np. komunikatory, terminale, programy LibreOffice, kalkulatory itp.) • korzystanie z telefonów komórkowych • korzystanie z kalkulatorów • używanie pamięci przenośnych • używanie rejestratorów dźwiękowych jak i wizyjnych 3 • udostępnianie zasobów komputera swojego lub korzystanie z zasobów innych komputerów • odwracanie się, zerkanie na sąsiedni monitor, rozglądanie lub rozmawianie • używanie ściąg W przypadku naruszenia powyższych zasad lub przejawu innego nieuczciwego zachowania w trakcie sprawdzianu, student może otrzymać ocenę 0 w trybie natychmiastowym bez możliwości poprawy w późniejszym terminie! 1.10 Materiały pomocniczne Do zajęć przydatne mogą być: • materiały udostępniane przez prowadzących wykłady • książki związane z tematyką programowania np. „Język C# 2010 i platforma .NET“ Andrew Troelsena • książki związane z tematyką programowania współbieżnego np. „Programowanie równoległe i asynchroniczne w C# 5.0” • kursy i poradniki w sieci np. http://www.centrumxp.pl/ 4 Rozdział 2 Pierwsze kroki z VS Po zalogowaniu się z menu start odnajdujemy program Microsoft Visual Studio 2010, lub nowszy. Przy pierwszym uruchomieniu poproszeni zostaniemy o wybór preferowanego języka, będzie nim C#. Z górnego menu wybieramy: File->New Project. W okienku jak na rysunku Rysunek 2.1: Okienko wybierania nowego projektu 2.1 zaznaczamy Visual C#->Windows Console Application. Na dole wpisujemy nazwę projektu Hello i nazwę solucji Lab1, potwierdzamy OK. Utworzony zostanie prosty projekt konsolowy z przygotowanym kodem. Można wypełnić kod metody Main prostą linijką. Listing 2.1: Program.cs 1 2 3 4 using System; using System.Collections.Generic; using System.Linq; using System.Text; 5 6 namespace Hello 5 7 { class Program { static void Main(string[] args) { Console.WriteLine("Hello"); } } 8 9 10 11 12 13 14 15 } Już teraz program można skompilować i zobaczyć jak działa Kompilacja i uruchomienie ctrl+F5 lub F5 - w trybie debugowania. 6 Rozdział 3 Pierwszy komunikat Dodajemy nowy projekt do solucji Lab1 Rysunek 3.1: Okienko wybierania nowego projektu We właściwościach solucji zmienić Startup Project na Multiple startup projects jak na rys. 3.2 Dzięki temu oba projekty będą startowały jednocześnie przy uruchamianiu. W obu projektach Serwer w plikach Program.cs dodajemy dwie nowe przestrzenie nazw: Listing 3.1: Nowe przestrzenie nazw 1 2 using System.Net.Sockets; using System.Net; W obu plikach dodajemy też obiekty klasy TcpListener oraz Socket. Listing 3.2: Nowe obiekty 7 Rysunek 3.2: Start obu projektów 1 2 private static TcpListener tcpLsn; private static Socket s; W programie serwera dodajemy metodę serwuj() Listing 3.3: Metoda serwuj 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void serwuj() { tcpLsn = new TcpListener(IPAddress.Parse("127.0.0.1"), 2222); //zainicjiuj ←listenera na podanym porcie i adresie tcpLsn.Start(); Socket sckt = tcpLsn.AcceptSocket(); //funkcja blokująca do czasu nadejścia ←połączenia Byte[] odebraneBajty = new Byte[100]; int ret = sckt.Receive(odebraneBajty, odebraneBajty.Length, 0); string tmp = null; tmp = System.Text.Encoding.ASCII.GetString(odebraneBajty); if (tmp.Length > 0) { Console.WriteLine("Odebrałem komunikat:"); Console.WriteLine(tmp); } tcpLsn.Stop(); } Oraz wołamy w głównym programie: Listing 3.4: Zmiany w Main 1 2 3 4 5 static void Main(string[] args) { Console.WriteLine("Startuję serwer..."); serwuj(); } 8 W projekcie Hello Dodajemy metody polacz i wyslij oraz modyfikujemy Main: Listing 3.5: Zmiany w Main 1 2 3 4 5 6 private static void polacz() { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress hostadd = IPAddress.Parse("127.0.0.1"); int port = 2222; 7 8 IPEndPoint EPhost = new IPEndPoint(hostadd, port); s.Connect(EPhost); 9 10 11 } 12 13 14 private static void wyslij(string wiadomosc) { 15 Byte[] byteData = Encoding.ASCII.GetBytes(wiadomosc.ToCharArray()); s.Send(byteData, byteData.Length, 0); 16 17 18 } 19 20 21 22 23 24 25 static void Main(string[] args) { polacz(); Console.WriteLine("Wysyłam komunikat..."); wyslij("ala ma kota"); } Teraz można uruchomić programy. Na konsoli Serwera powinniśmy zobaczyć przesłany komunikat. 9 Rozdział 4 Pierwsze Zadanie Należy tak zmodyfikować program by stworzyć prosty komunikator. Użytkownik powinien móc naprzemiennie wpisywać tekst raz w jednym raz w drugim terminalu. Tekst powinien być przekazywany przez łącze TCP/IP tak jak na powyższym przykładzie. Program powinien się zakończyć gdy w którejkolwiek konsoli użytkownik napiszę słowo „quit”. Należy dodać obsługę błędów, przechwycenie wyjątków. 10 Rozdział 5 Komunikator wersja współbieżna Przerobić komunikator, do wersji współbieżnej. 11