Komunikator internetowy w C#



Podobne dokumenty
1. Instalacja systemu Integra 7

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Instrukcja pobrania i instalacji. certyfikatu niekwalifikowanego na komputerze lub karcie kryptograficznej wersja 1.2

Program do obsługi ubezpieczeń minifort

Certyfikat niekwalifikowany zaufany Certum Silver. Instrukcja dla uŝytkowników Windows Vista. wersja 1.1 UNIZETO TECHNOLOGIES SA

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

ZESTAW PLATINUM. - instrukcja pobrania i instalacji certyfikatu niekwalifikowanego wersja 1.2

Instalacja programu Ozon.

Wykorzystanie protokołu SCEP do zarządzania certyfikatami cyfrowymi w systemie zabezpieczeń Check Point NGX

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Dokumentacja aplikacji Szachy online

Podręcznik Integracji

Instrukcja do panelu administracyjnego. do zarządzania kontem FTP WebAs.

Konfiguracja komputera przeznaczonego do pracy z IndustrialSQL Server 8.0 (komputer serwer)

Instrukcja wypełniania i rejestrowania wniosków on-line do wszystkich Akcji programu MłodzieŜ w działaniu

Instrukcja uŝytkownika narzędzia Skaner SMTP TP. Uruchamianie aplikacji

Internetowy moduł prezentacji WIZYT KLIENTA PUP do wykorzystania np. na stronie WWW. Wstęp

Tomasz Greszata - Koszalin

Opis. systemu. zliczania. obiektów. ruchomych. wersja. dla salonów. i sieci salonów.

ZiMSK. Konsola, TELNET, SSH 1

Opracowanie protokołu komunikacyjnego na potrzeby wymiany informacji w organizacji

Rys Rejestracja certyfikatu kwalifikowanego w programie Płatnik

Konfiguracja programu pocztowego Outlook Express i toŝsamości.

KURS ACCESS 2003 Wiadomości wstępne

Procedura zamawiania licencji.

Platformy Programistyczne Zagadnienia sieciowe i wątki

Bezpieczne strony WWW dla edukacji, organizacji non-profit i uŝytkowników indywidualnych.

Luxriot VMS. Dawid Adamczyk

9.5 Rozliczanie zaopatrzenia w przedmioty ortopedyczne i środki pomocnicze

Serwery aplikacji. dr Radosław Matusik. radmat

Dostęp do poczty przez www czyli Kerio Webmail Poradnik

Aplikacja Sieciowa wątki po stronie klienta

Biuletyn techniczny. System CDN OPT!MA i współpraca z SQL Server 2005 Express Edition CDN OPT!MA Copyright 2007 COMARCH SA

Jak wykorzystać Pulpit Zdalny w Windows 2003 Serwer do pracy z programem FAKT

Dokumentacja instalacji aktualizacji systemu GRANIT wydanej w postaci HotFix a

Tworzenie aplikacji rozproszonej w Sun RPC

USOSweb U-MAIL

Instrukcja zarządzania kontami i prawami

Podstawowe informacje o obsłudze pliku z uprawnieniami licencja.txt

Biuletyn techniczny. Połączenie do Microsoft SQL Server z poziomu CDN OPT!MA. Data powstania: Copyright 2007 COMARCH SA

Technologia VoIP Podstawy i standardy

Dokumentacja techniczna

CRM VISION INSTALACJA I UśYTKOWANIE ROZSZERZENIA DO PROGRAMU MOZILLA THUNDERBIRD

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

IG1: INSTALACJA KOMUNIKATORA GADU-GADU

Wymagane jest podłączenie serwera do Internetu (konieczne do zdalnego dostępu).

Sieci komputerowe i bazy danych

CRM VISION Instalacja i uŝytkowanie rozszerzenia do programu Mozilla Thunderbird

OPIS MODUŁU E-DORADZTWO ORAZ E-SZKOLENIA

Lab3 - Zastosowania protokołów przesyłania plików

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

INSTRUKCJA INSTALACJI SYSTEMU

Instrukcja administratora Agenta Administracji i Aktualizacji Aplikacji oraz baz danych Polskiego FADN oraz pobierania danych słownikowych

Instrukcja Instalacji

Połączenie do Microsoft SQL Server z poziomu Comarch OPT!MA

IV.3.b. Potrafisz samodzielnie dokonać podstawowej konfiguracji sieci komputerowej

Program dla praktyki lekarskiej. Instalacja programu dreryk

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Aby pobrać program FotoSender naleŝy na stronę lub i kliknąć na link Program do wysyłki zdjęć Internetem.

Aplikacja do zarządzania kontami bankowymi

FAQ: /PL Data: 14/06/2007 Konfiguracja współpracy programów PC Access i Microsoft Excel ze sterownikiem S7-200

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Instrukcja zarządzania kontami i prawami uŝytkowników w systemie express. v.7

Konfiguracja modułu alarmowania w oprogramowaniu InTouch 7.11

15. Funkcje i procedury składowane PL/SQL

Uwierzytelnianie użytkowników sieci bezprzewodowej z wykorzystaniem serwera Radius (Windows 2008)

Pierwsze kroki w systemie ING BusinessOnLine. Metoda oparta o certyfikat

Sieci VPN SSL czy IPSec?

Biuletyn techniczny. Drukarki fiskalne w usługach terminalowych. Comarch OPT!MA Copyright 2007 COMARCH SA

Tablice, DataGridView

Zaawansowane aplikacje internetowe

Dokumentacja programu Rejestr Informacji o Środowisku

Klient poczty elektronicznej - Thunderbird

Sprawozdanie nr 4. Ewa Wojtanowska

Pomoc dla r.

Instrukcja konfiguracji programu Invoice.Exporter

Poradnik korzystania z usługi FTP

Instrukcja konfiguracji funkcji skanowania

Instrukcja instalacji Control Expert 3.0

INFORMATOR TECHNICZNY WONDERWARE. Instalacja oprogramowania IndustrialSQL Server 8.0. Instalacja Microsoft SQL Server 2000 Standard Edition

W oknie na środku, moŝna wybrać język, który będzie językiem domyślnym dla TC. Wybierzmy zatem język polski:

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

DOKUMENTACJA ADMINISTRATORA SYSTEMU INFORMATYCZNEGO POLSKI FADN

Uruchomienie programu COMPAS 2026LAN

Usługi sieciowe systemu Linux

Instrukcja skrócona (dla informatyka)

Serwer SSH. Wprowadzenie do serwera SSH Instalacja i konfiguracja Zarządzanie kluczami

Konfiguracja poczty IMO w programach Microsoft Outlook oraz Mozilla Thunderbird

Certyfikat Certum Basic ID. Instrukcja dla użytkowników Windows Vista. wersja 1.3 UNIZETO TECHNOLOGIES SA

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

Instrukcja dla użytkowników Windows Vista Certyfikat Certum Basic ID

VPN dla CEPIK 2.0. Józef Gawron. (wirtualna sieć prywatna dla CEPIK 2.0) Radom, 2 lipiec 2016 r.

Leszek Stasiak Zastosowanie technologii LINQ w

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Szczególne cechy usług w CDN Online

Przekazywanie danych. Dane zewnętrzne mogą pochodzić z róŝnych źródeł:

Aplikacja wielowątkowa prosty komunikator

KONFIGURACJA SIECIOWA SYSTEMU WINDOWS

Forum Client - Spring in Swing

DHL CAS ORACLE Wymagania oraz instalacja

Transkrypt:

PAŃSTWOWA WYśSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie Komunikator internetowy w C# autor: Artur Domachowski Elbląg, 2009 r.

Komunikacja przy uŝyciu poczty internetowej jest najbardziej powszechną i ogólnodostępną formą komunikacji poprzez Internet. Pozwala ona na przesyłanie wiadomości pomiędzy uŝytkownikami, którzy posiadają konta na róŝnych serwerach. Taka forma komunikacji zaspokaja wiele potrzeb, jednakŝe nie wszystkie. Mimo iŝ wiadomości przekazywane są przewaŝnie bardzo szybko to prowadzenie rozmowy w czasie rzeczywistym jest niemoŝliwe. Powstały więc aplikacje sieciowe pozwalające na rozmowę tekstową w czasie rzeczywistym. Komunikatory internetowe (ang. instant Messenger, IM) pozwalają komunikować się poprzez natychmiastowe przesyłanie wiadomości między uŝytkownikami. Tylko one dają namiastkę prawdziwej rozmowy w formie tekstowej. Dla uŝytkownika przesyłanie wiadomości jest proste i wygodne, a co najwaŝniejsze natychmiastowe. Komunikator internetowy oparty o architekturę klient - serwer składa się z aplikacji klienckiej oraz serwerowej. KaŜdy klient łączy się z serwerem, a ten z kolei zbiera informacje o klientach i udostępnia innym klientom. Serwer pośredniczy takŝe w przekazywaniu informacji między klientami. Komunikator internetowy Domacho działa w oparciu o architekturę klient - serwer. Serwer tego komunikatora jest wielowątkową aplikacją konsolową, napisaną w języku C#(csharp). Dzięki wykorzystaniu protokołu TCP/IP, przesyłanie wiadomości moŝliwe jest w sieciach lokalnych (LAN, local area network) jak i przy uŝyciu sieci rozległych (WAN, wide area network). Serwer komunikatora wykorzystuje bazę danych Microsoft SQL Server 2005 do przechowywania informacji o klientach oraz zapisywania wiadomości do niedostępnych uŝytkowników. Całość działa pod kontrolą systemu operacyjnego Microsoft Windows 2003 R2 Enterprise Edition with SP2. Do prawidłowego funkcjonowania aplikacja serwerowa jak i kliencka wymaga zainstalowanego środowiska Microsoft.NET Framework w wersji 2.0 lub wyŝszej. Serwer komunikatora Domacho akceptuje połączenia na porcie 8000. Po połączeniu się z klientem wysyła Ŝądanie przesłania nazwy uŝytkownika oraz hasła. Hasło przekazywane jest w postaci zaszyfrowanego kodu, do szyfrowania uŝyto algorytmu kryptograficznego SHA1. Podczas logowania serwer porównuje otrzymany zaszyfrowany kod z tym zapisanym w bazie danych. Po zalogowaniu wszystkie dane dotyczące klienta, połączenia z nim oraz z wszystkimi innymi klientami przekazywane są do osobnego wątku. KaŜdemu zalogowanemu klientowi odpowiada jeden wątek w serwerze. 2

Rys1. Klasy w kodzie źródłowym serwera komunikatora Domacho, opracowanie własne. Podstawę do przekazywania informacji z klasy głównej Serwer do klasy Sesja stanowi struktura clientinfo. Przechowuje ona dwie wartości: pierwszą z nich jest ciąg znaków odpowiadający nazwie uŝytkownika, drugą zaś jest obiekt klasy TcpClient, który przechowuje wszystkie informacje dotyczące połączenia. Klasa TcpClient jest elementem środowiska.net Framework. Hashtable klienci = new Hashtable();... struct clientinfo public String login; public TcpClient tcpclient; KaŜdy nowo utworzony obiekt struktury jest dodawany do tablicy Hashtable o nazwie klienci, która jako klucz przyjmuje nazwę uŝytkownika, a jako wartość obiekt. Tablica Hashtable deklarowana jest poza klasą serwer. 3

clientinfo clientinf = new clientinfo(); //tworzenie obiektu struktury clientinf.login = login; clientinf.tcpclient = client; klienci.add(clientinf.login, clientinf); // dodawanie do Hashtable Do nowoutworzonego wątku przekazywane są wszystkie niezbędne dane do obsługi połączenia z klientem komunikatora, nazwa uŝytkownika oraz informacje o połączeniach z innymi klientami w sieci. new Thread(new ThreadStart(new sesja(clientinf.login, client, klienci).run)).start(); KaŜdy wątek tworzy nowy obiekt klasy sesja, w którym obsługuje klienta do momentu, aŝ nie wyśle on wiadomości o chęci zakończenia połączenia, bądź teŝ połączenie nie zostanie zerwane. NajwaŜniejszą funkcją jaką pełni kaŝdy wątek jest przekazywanie informacji pomiędzy klientami. Operacja moŝliwa jest poprzez pobranie odpowiedniego obiektu struktury clientinfo z tablicy klienci. Następnie ze struktury clientinfo pobierany jest obiekt klasy TcpClient. Z pobranego obiektu klasy TcpClient tworzy się nowy strumień do wysyłania danych do tego klienta BinaryWriter. clientinfo info = (clientinfo)users[login]; wclient = new BinaryWriter(info.tcpclient.GetStream()); Posiadając strumień wysyłania do danego uŝytkownika, moŝna wysłać do niego dane w postaci ciągów znaków. Po wysłaniu wiadomości naleŝy zwolnić zasób. wclient.write(wiadomosc); wclient.flush(); Serwer przyjmuje i wysyła dane oddzielone specjalnym znakami #*, dla przykładu wiadomość dla uŝytkownika odbiorca od uŝytkownika nadawca przedstawia się następująco: 1#* nadawca#* odbiorca#* wiadomość#* data. Na początku kaŝdej wiadomości jest typ polecenia wyraŝany liczbą, następnie nazwa uŝytkownika od którego pochodzi wiadomość, potem nazwa uŝytkownika, do którego wiadomość ma być przekazana. Treść tej wiadomości oraz na samym końcu data, którą dodaje serwer podczas przekazywania wiadomości. 4

Rys2. Okno serwera komunikatora Domacho, opracowanie własne. Dzięki zastosowaniu prostego modelu architektury, klient nie musi nawiązywać wielu połączeń. Nawiązuje jedynie jedno z serwerem komunikatora. Połączenie nawiązywane jest przez wątek działający w tle (backgroundworker). Po zalogowaniu się następuje zmiana grafiki w głównym oknie klienta. Rys3. Okna klienta komunikatora Domacho, przed i po zalogowaniu, opracowanie własne. 5

Głównym problemem przy konstrukcji klienta komunikatora było rozróŝnianie okien formularza drugiego (Form2). W oknie drugiego formularza prowadzone są rozmowy z innymi uŝytkownikami. KaŜde pojedyncze okno Form2 odpowiada rozmowie z jednym uŝytkownikiem. Przykładowo, gdy klient komunikatora otrzyma wiadomość od uŝytkownika artdom, musi wyświetlić ją oknie rozmowy z uŝytkownikiem artdom. Z uwagi na to, Ŝe uŝytkownik moŝe prowadzić wiele rozmów jednocześnie, będzie istniało wiele obiektów From2. Rys4. Okno Form2 komunikatora Domacho, opracowanie własne. RozróŜnianie obiektów Form2 jest niezbędnym elementem przekazywania wiadomości do odpowiednich okien rozmowy. Problem ten rozwiązano przy uŝyciu słownika przechowującego obiekty From2. Słownik Dictionary, o nazwie rozmowy jest elementem środowiska.net Framework, moŝe przechowywać dowolne zmienne i obiekty. Dictionary<String, Form2> rozmowy = new Dictionary<String, Form2>(); Przyjmuje on dwie wartości, pierwszą jest nazwa uŝytkownika, z którym prowadzona jest rozmowa, drugą zaś obiekt formularza rozmowy Form2. Klient otrzymując wiadomość sprawdza, czy słownik rozmowy zawiera informacje o uŝytkowniku, od którego pochodzi wiadomość. JeŜeli tak, pobiera obiekt Form2 ze słownika Dictionary i przekazuje wiadomość do niego. JeŜeli nie, tworzy nowe okno rozmowy. if (rozmowy.containskey(nadawca)) rozmowy[nadawca].wyswietlanie_wiadomosci(fullnadawca, wiad, dataczas); else TheForm = new Form2(w, nadawca, odbiorca, wiad, fullnadawca, fullodbiorca, dataczas); // uwtorzenie nowego okna Form2 TheForm.Text = "Rozmowa z " + fullnadawca; // napis na belce okna Form2 rozmowy.add(nadawca, TheForm); // dodajemy rozmowę do Dictionary TheForm.Show(); 6

Funkcja showwindow odpowiedzialna jest za przekazywanie wiadomości do odpowiednich okien rozmowy lub tworzenie nowych okien rozmowy. Aby bezpiecznie i bezawaryjnie wywołać ją z wątku obsługującego połączenie naleŝy uŝyć delegaty. Delegata najprościej moŝna opisać jako wskaźnik na funkcję. private delegate void showwindowcallback(binarywriter w, string nadawca, string odbiorca, string wiad, string dataczas); // Delegata private void showwindow(binarywriter w, string nadawca, string odbiorca, string wiad, string dataczas) // Funkcja if (this.invokerequired) showwindowcallback f = new showwindowcallback(showwindow); this.invoke(f, new object[] w, nadawca, odbiorca, wiad, dataczas ); else // Treść funkcji showwindow Gdy funkcja showwindow wymaga wywołania poprzez metodę Invoke, tworzony jest nowy obiekt delegaty showwindowcallback, który ponownie wywołuje funkcję showwindow. Delegata przyjmuje i przekazuje takie same zmienne jak funkcja, z której została wywołana. Tworzony jest nowy obiekt delegaty, przez co odwołanie się do funkcji showwindow z innego wątku jest bezpieczne. Komunikator posiada równieŝ dodatkowe metody, jak na przykład moŝliwość zmiany hasła, czy wylogowania się. Komunikator Domacho nadal jest w fazie testów, najnowsze wiadomości dotyczące jego rozwoju moŝna otrzymać pod adresem: http://domacho.pl. 7