Prosty klient i serwer TCP

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.

siecgniazda1

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.

net_serwerklient

 

592total visits,1visits today

Tagi , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

18 + = 27

This site uses Akismet to reduce spam. Learn how your comment data is processed.