BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Bardzo prosty wielowątkowy klient TCP/IP w C#

01-10-2003 13:19 | User 107543
Czyli jak podłączyć się do hosta, przesyłać i odbierać dane

Zastosowanie klienta TCP/IP omówię tutaj na przykładzie prostego klienta IRCa. Każdy program tego typu, aby poprawnie funkcjonował, musi odpowiadać na żądania użytkownika, czyli na przykład pobierać tekst jaki użytkownik w danej chwili wpisuje, ma ten tekst analizować i przesyłać, w tym samym czasie jednak musi nasłuchiwać sieci, czy nie pojawiają się komunikaty z zewnątrz, na przykład wiadomości dla użytkownika.

Aby program jednocześnie wykonywał te dwie (przynajmniej dwie, można ich wyróżnić w zasadzie więcej) czynności, należy zastosować wielowątkowość (MultiThreading). Wielowątkowość pozwala pojedynczmu procesowi (aplikacji) na wykonywanie kilku zadań niezależnie od siebie. Na przykład – wiele programów graficznych, podczas żmudnych obliczeń, jakie wykonują, pozwalają użytkownikowi na operowanie interfejsem, przerwanie obliczeń lub na inne czynności. Podczas, gdy jeden wątek wykonuje obliczenia, inny wątek zajmuje się interfejsem użytkownika.

Aby uzyskać dostęp do obsługi wątków, należy powiadomić kompilator o użyciu przestrzeni nazw System.Threading, w której znajduje się klasa Thread. Jednocześnie przyda się kilka inna przestrzeń nazw – System.Net.Sockets, do obsługi sieci.

Aplikacja na samym początku powinna połączyć się z serwerem, do tego wykorzystujemy klasę TcpClient z przestrzeni nazw System.Net.Sockets, której obiekt łączy się z podanym wcześniej serwerem na podany port. Po połączeniu się z serwerem można pobrać skojarzony z połączeniem strumień danych, który będą wykorzystywać wątki: nasłuchujący i wysyłający dane – ListenThread i SendThread. Oba wątki muszą najpierw zostać stworzone i uruchomione przez aplikację. Jeden wątek, tak jak łatwo się domyślić – prowadzi nasłuch danych i wyświetla je na ekranie, a drugi – służy za interfejs i jednocześnie wysyła dane.

Przykładowy kod źródłowy nie uwzględnia wielu spraw, na przykład stanów wyjątkowych, formatowania otrzymanych danych, tworzenia ładnie wyglądającego znaku zachęty dla użytkownika. Kod został stworzony dla przejrzystości tworzenia wątków i obsługi strumienia danych sieciowych za pomocą klas NetworkStream i TcpClient. Aplikacja też nie kończy w odpowiedni sposób swojego działania. Kod powinien stanowić prostą bazę do tworzenia bardziej zaawansowanych klientów sieciowych, z obsługą wszystkich wyjątków, z lepszym interfejsem. Jest to tylko jeden z wielu sposobów rozwiązania problemu, jednak dla początkujących programistów powinien stanowić przykład, jak proste jest użytkowanie sieci za pomocą Visual C#.

 

Marcin Seredyński

Załączniki:

Podobne artykuły

Komentarze 1

CrispIn
CrispIn
0 pkt.
Nowicjusz
17-01-2013
oceń pozytywnie 0
MISTRZOSTWO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.