예제 #1
0
        private static void Main(string[] args)
        {
            Server s = new Server();        // utworzenie obiektu serwera

            try
            {
                Console.WriteLine("Server"); // informacja o utworzeniu obiektu serwera
                Console.WriteLine("Waiting for connection");
                s.CreateListener();          // przypisanie portu (27015)
                while (true)
                {
                    s.StartListen();                       // rozpoczenie nasluchiwania
                    s.AccecptClient();                     // akceptacja klienta, ktory probuje nawiazac polaczenie
                    Console.WriteLine("Client connected"); // informacja o poprawnym nawiazaniu polaczenia
                    Segment seg;
                    s.CreateStream();                      // utworzenie strumienia
                    s.buffer = new byte[16];               // ustalenie wielkosci bufora
                    string ErrorInput;                     // komunikaty bledow
                    s.Read(ref s.buffer);
                    seg = new Segment(s.buffer);
                    Console.WriteLine("ID otrzymane:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(s.buffer), seg._ByteArray.Length); // wyswietlenie segmentu
                    s.buffer = s.IDRequest();                                                                                                    //tworzenie odpowiedzi na przydzielenie id sesji
                    s.Write(s.IDRequest());
                    seg = new Segment(s.buffer);
                    Console.WriteLine("ID wyslane:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(s.buffer), seg._ByteArray.Length);     // wyswietlenie segmentu
                    while (true)
                    {
                        s.buffer = new byte[16];       //reset buffera
                        s.Read(ref s.buffer);          // odczytanie wiadomosci
                        seg        = new Segment(s.buffer);
                        ErrorInput = s.CheckExit(seg); // sprawdzanie, czy otrzymany segment nie zawiera komunikatu bledu
                        if (ErrorInput != "")
                        {
                            Console.WriteLine(ErrorInput);
                            break;
                        }
                        Console.WriteLine("Segment otrzymany:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(s.buffer), seg._ByteArray.Length);     // wyswietlenie segmentu


                        seg      = s.MakeAnswer(s.Calculate(seg));
                        s.buffer = seg._ByteArray;
                        s.Write(s.buffer);                                                                                                              //wyslanie odpowiedzi
                        Console.WriteLine("Segment wysłany:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(s.buffer), seg._ByteArray.Length); // wyswietlenie segmentu
                        //Console.WriteLine("Długość {0}", seg._bitAR.Length);
                    }
                    s.Exit();   // bezpieczne zakonczenie polaczenia
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                s.Exit();       // awaryjne zakonczenie polaczenia
            }
            Console.ReadKey();  // zamykanie aplikacji przez wcisniecie dowolnego przycisku
        }
        private static void Main(string[] args) // metoda do sprawdzania dzialania klienta
        {
            Client c = new Client();            // utworzenie obiektu klienta (bezargumentowo do testow)

            try
            {
                Console.WriteLine("Client");    // informacja o utworzeniu obiektu klienta
                c.Createclient();               // utworzenie klienta, port 27015
                c.CreateStream();               // utworzenie strumienia z serwerem
                Console.WriteLine("Connected"); // informacja o polaczeniu
                c.buffer = c.IDRequest();
                c.Write(c.buffer);
                Segment seg = new Segment(c.buffer);
                Console.WriteLine("Żądanie ID wysłane:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(c.buffer), seg._ByteArray.Length);     // wyswietlenie segmentu
                c.buffer = new byte[16];
                c.Read(ref c.buffer);
                seg = new Segment(c.buffer);
                Console.WriteLine("ID otrzymane:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(c.buffer), seg._ByteArray.Length); // wyswietlenie segmentu

                string[] UserInput;                                                                                                          //wczytanie danych do wyslania

                while (true)
                {
                    UserInput = ReadUserInput();
                    seg       = new Segment(UserInput);
                    c.buffer  = seg._ByteArray;
                    c.Write(c.buffer);  // wysylanie
                    if (UserInput[0] == "exit")
                    {
                        Console.WriteLine("EXIT!");
                        break;
                    }
                    Console.WriteLine("Segment wysłany:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(c.buffer), seg._ByteArray.Length);   // wyswietlenie segmentu
                    c.buffer = new byte[16];
                    c.Read(ref c.buffer);                                                                                                             // odbieranie
                    seg = new Segment(c.buffer);
                    Console.WriteLine("Segment otrzymany:\n{0}\n{1}", seg.ReadSegment(), BufferUtilites.ReadBuffer(c.buffer), seg._ByteArray.Length); // wyswietlenie segmentu

                    switch (c.ReadAnswer(seg))                                                                                                        // wyswietlenie odpowiedzi od serwera
                    {
                    case -2:
                        Console.WriteLine("OVERFLOW");
                        break;

                    case -3:
                        Console.WriteLine("NOTALLOWED");
                        break;

                    default:
                        Console.WriteLine("Serwer: {0}", c.ReadAnswer(seg));        // poprawna odpowiedz
                        break;
                    }
                }

                c.Exit();   // bezpieczne zakonczenie polaczenia
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                string[] UserError = new string[3];
                UserError[0] = "exit";
                UserError[1] = "1";     // komunikat bledu
                UserError[2] = "1";     // komunikat bledu

                Segment segError = new Segment(UserError);

                c.buffer = segError._ByteArray;
                c.Write(c.buffer);  // wysylanie

                Console.WriteLine("ERROR EXIT!");


                c.Exit();      // awaryjne zakonczenie polaczenia
            }
            Console.ReadKey(); // zamykanie aplikacji przez wcisniecie dowolnego przycisku
        }