Kolejnym przykładem będzie wykorzystanie gniazd sieciowych. Napiszemy prosty serwer oraz klient TCP, który będzie służył do komunikacji w sieci.
Metoda połącz – przypięta do zdarzenia Click() przycisku Połącz:
private void button2_Click(object sender, EventArgs e) { try { klientTCP = new TcpClient(l_serwer.Text, 6000); zawartosc.Text += "Połączono z serwerem " + l_serwer.Text + Environment.NewLine; } catch { zawartosc.Text+="Nie mogę połączyć się z serwerem" + l_serwer.Text + Environment.NewLine; return; } StrumienSieciowy = klientTCP.GetStream(); StrumienCzytajacy = new StreamReader(StrumienSieciowy); StrumienZapisujacy = new StreamWriter(StrumienSieciowy); }
Metoda Rozłącz
Metoda przypięta do zdarzenia Click() przycisku Rozłącz:
private void button3_Click(object sender, EventArgs e) { try { StrumienCzytajacy.Close(); StrumienZapisujacy.Close(); StrumienSieciowy.Close(); zawartosc.Text += "Rozłączono z serwerem."+Environment.NewLine; } catch (Exception jaki_blad) { zawartosc.Text += "Wystąpił błąd podczas rozłączania: " + jaki_blad.Message + Environment.NewLine; } }
Metoda wyślij
Metoda Click() przycisku Wyślij:
private void button1_Click(object sender, EventArgs e) { try { string tekst_do_wyslania; StrumienZapisujacy.WriteLine(do_wyslania.Text); zawartosc.Text+="Wysyłanie tekstu: "+do_wyslania.Text+Environment.NewLine; StrumienZapisujacy.Flush(); tekst_do_wyslania = StrumienCzytajacy.ReadLine(); zawartosc.Text += "Odpowiedź serwera: "+tekst_do_wyslania+Environment.NewLine; } catch (Exception jaki_blad) { zawartosc.Text+="Wystąpił błąd serwera: "+jaki_blad.Message+Environment.NewLine; } }
Kompletny kod źródłowy:
using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using System.IO; namespace TCPSerwer { class Program { static void Main(string[] args) { TcpListener tcpListener = new TcpListener(6000); //Port nasłuchu serwera tcpListener.Start(); Console.WriteLine("Przykład do publikacji Programowanie Visual Studio Express"); Console.WriteLine("Leszek Klich, Michał Andruchów") ; Console.WriteLine("======================================================="); Console.WriteLine("Serwer pracuje i czeka na połączenie.") ; //Akceptacja połączenia od klienta Socket GniazdoKlienta = tcpListener.AcceptSocket(); try { if (GniazdoKlienta.Connected) { while(true) { Console.WriteLine("Podłączono klienta."); NetworkStream StrumienSieciowy = new NetworkStream(GniazdoKlienta); StreamWriter StrumienZapisujący = new StreamWriter(StrumienSieciowy); StreamReader StrumienCzytajacy = new StreamReader(StrumienSieciowy); string line = StrumienCzytajacy.ReadLine(); Console.WriteLine("Czytam:" +line); line=line.ToUpper(); switch (line) { case "WITAM": StrumienZapisujący.WriteLine("Rózwnież witam!"); break; case "DZIEŃ DOBRY": StrumienZapisujący.WriteLine("Dzień dobry!"); break; case "HALO": StrumienZapisujący.WriteLine("Halo halo!"); break; case "NAZWA": StrumienZapisujący.WriteLine("Jestem prostym serwerem TCP!"); break; case "DATA": StrumienZapisujący.WriteLine("Dzisiaj mamy "+DateTime.Today); break; default: { StrumienZapisujący.WriteLine("Nie znam polecenia " +line+" Spróbuj: WITAM, DZIEŃ DOBRY, HALO, NAZWA, DATA"); } break; } StrumienZapisujący.Flush() ; } } GniazdoKlienta.Close(); Console.WriteLine("Zakończenie."); } catch(Exception e) { Console.WriteLine("Wystąpił błąd "+e.ToString()); } } } }
A oto działający klient i serwer.
Total Page Visits: 2263 - Today Page Visits: 3