コード例 #1
0
ファイル: Klient.cs プロジェクト: kuadam/lab_ts8
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Wprowadz IP serwera: ");
                String     ip   = Console.ReadLine();
                int        port = 55123;
                String     id;
                IPEndPoint ServerIP  = new IPEndPoint(IPAddress.Parse(ip), port);
                UdpClient  udpClient = new UdpClient();
                udpClient.Connect(ServerIP);

                Komunikat komunikat  = new Komunikat();
                Komunikat komunikat2 = new Komunikat();

                //porsba od id
                komunikat.SetOp("GetID");
                Byte[] sendBytes = Encoding.ASCII.GetBytes(komunikat.GetMsg());
                udpClient.Send(sendBytes, sendBytes.Length);

                //odebranie ack
                komunikat.Ustaw(udpClient.Receive(ref ServerIP));

                //odebranie id
                komunikat.Ustaw(udpClient.Receive(ref ServerIP));
                id = komunikat.GetId();

                Console.WriteLine("Nadano ID: " + komunikat.GetId());
                //wyslanie ack
                komunikat.Clear();
                komunikat.SetOp("ACK");
                komunikat.SetId(id);
                sendBytes = Encoding.ASCII.GetBytes(komunikat.GetMsg());
                udpClient.Send(sendBytes, sendBytes.Length);



                //pobranie liczby
                int  liczba;
                bool dobra;
                bool czy_liczba;
                do
                {
                    dobra = true;
                    Console.WriteLine("Podaj liczbe parzysta naturalna");
                    czy_liczba = int.TryParse(Console.ReadLine(), out liczba);
                    if (liczba < 1 || liczba % 2 != 0 || !czy_liczba)
                    {
                        dobra = false;
                    }
                } while (!dobra);

                //wyslanie liczby
                komunikat.Clear();
                komunikat.SetOp("LiczbaDoPrzedzialu");
                komunikat.SetId(id);
                komunikat.SetLiczba(liczba.ToString());
                sendBytes = Encoding.ASCII.GetBytes(komunikat.GetMsg());
                udpClient.Send(sendBytes, sendBytes.Length);
                //odebranie ack
                komunikat.Ustaw(udpClient.Receive(ref ServerIP));

                //odebranie liczby prob
                int l_prob;
                komunikat.Ustaw(udpClient.Receive(ref ServerIP));
                l_prob = Convert.ToInt32(komunikat.GetLiczba());

                Console.WriteLine("Liczba prob " + l_prob);
                //wyslanie ack
                komunikat.Clear();
                komunikat.SetOp("ACK");
                komunikat.SetId(id);
                sendBytes = Encoding.ASCII.GetBytes(komunikat.GetMsg());
                udpClient.Send(sendBytes, sendBytes.Length);

                while (true)
                {
                    if (l_prob <= 0)
                    {
                        Console.WriteLine("Przekroczyles liczbe prob");
                        break;
                    }

                    do
                    {
                        dobra = true;
                        Console.WriteLine("Podaj liczbe");
                        czy_liczba = int.TryParse(Console.ReadLine(), out liczba);
                        if (!czy_liczba)
                        {
                            dobra = false;
                        }
                    } while (!dobra);

                    //przeslanie liczby
                    komunikat.Clear();
                    komunikat.SetOp("Zgadywana");
                    komunikat.SetId(id);
                    komunikat.SetLiczba(liczba.ToString());
                    sendBytes = Encoding.ASCII.GetBytes(komunikat.GetMsg());
                    udpClient.Send(sendBytes, sendBytes.Length);
                    //odebranie ack
                    komunikat.Ustaw(udpClient.Receive(ref ServerIP));

                    //odebranie odpowiedzi o zgadwyanej liczbie
                    komunikat.Ustaw(udpClient.Receive(ref ServerIP));

                    //wyslanie ack
                    komunikat2.Clear();
                    komunikat2.SetOp("ACK");
                    komunikat2.SetId(id);
                    sendBytes = Encoding.ASCII.GetBytes(komunikat2.GetMsg());
                    udpClient.Send(sendBytes, sendBytes.Length);

                    if (komunikat.GetOdp() == "Wygrywasz")
                    {
                        Console.WriteLine("Wygrales");
                        break;
                    }
                    else if (komunikat.GetOdp() == "Przegrywasz")
                    {
                        Console.WriteLine("Przegrales");
                        break;
                    }
                    else if (komunikat.GetOdp() == "Mniejsza")
                    {
                        Console.WriteLine("Zgadywana liczba jest mniejsza");
                    }
                    else if (komunikat.GetOdp() == "Wieksza")
                    {
                        Console.WriteLine("Zgadywana liczba jest wieksza");
                    }
                    l_prob--;
                    Console.WriteLine("Liczba prob: " + l_prob);
                }


                Console.ReadKey();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
コード例 #2
0
        static void Main()
        {
            Console.WriteLine("Wprowadz ip serwera");
            string ip;

            ip = Console.ReadLine();
            try
            {
                BitArray  bitArray = new BitArray(24);
                Byte[]    bytes = new Byte[3];
                int       min = 0, max = 0;
                int       port   = 51997;
                TcpClient client = new TcpClient(ip, Convert.ToInt32(port));


                NetworkStream stream = client.GetStream();
                // Przeslanie zadania nadania id

                Komunikat komunikat = new Komunikat();
                komunikat.SetOp("000001");
                komunikat.GetBitArray().CopyTo(bytes, 0);
                stream.Write(bytes, 0, bytes.Length);

                int i;
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    komunikat.ustaw(bytes);
                    Console.WriteLine("ID nadane przez serwer: " + Convert.ToInt32(komunikat.GetId(), 2));
                    break;
                }


                //Rozpoczecie gry, przeslanie liczby
                komunikat.Resetruj();
                Console.WriteLine("\nWprowadz liczbe <0-200> aby rozpoczac gre: ");
                komunikat.SetOp("000011");
                //string temp;
                //int liczba;
                string temp;
                int    liczba = 0;
                bool   czy_liczba;
                do
                {
                    czy_liczba = true;
                    temp       = Console.ReadLine();
                    foreach (var x in temp)
                    {
                        if (!Char.IsDigit(x))
                        {
                            czy_liczba = false;
                            Console.WriteLine("Podaj liczbe z przedzialu 0-200");
                            break;
                        }
                    }
                    if (czy_liczba)
                    {
                        liczba = Convert.ToInt32(temp);
                        if (liczba > 200 || liczba < 0)
                        {
                            Console.WriteLine("Podaj liczbe z przedzialu 0-200");
                            czy_liczba = false;
                        }
                    }
                } while (!czy_liczba);

                komunikat.SetLiczba(Convert.ToString(liczba, 2).PadLeft(8, '0'));

                komunikat.GetBitArray().CopyTo(bytes, 0);
                stream.Write(bytes, 0, bytes.Length);

                //odbieranie przedzialu
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    komunikat.Resetruj();
                    komunikat.ustaw(bytes);
                    if (komunikat.GetOp() == "000100")
                    {
                        min = Convert.ToInt32(komunikat.GetLiczba(), 2);
                    }
                    break;
                }
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    komunikat.Resetruj();
                    komunikat.ustaw(bytes);
                    if (komunikat.GetOp() == "000101")
                    {
                        max = Convert.ToInt32(komunikat.GetLiczba(), 2);
                    }
                    break;
                }

                //Rozpoczecie gry
                Console.WriteLine("\nPrzedzial, w kotrym znajduje sie szukana liczba: " + min + "-" + max);
                Console.WriteLine("Zaczynamy gre! Podawaj kolejne liczby az nie trafisz. Powodzenia!");
                int zgadywana;

                while (true)
                {
                    komunikat.Resetruj();
                    do
                    {
                        temp      = Console.ReadLine();
                        zgadywana = Convert.ToInt32(temp);
                        if (zgadywana > max || zgadywana < min)
                        {
                            Console.WriteLine("Podaj liczbe z przedzialu!");
                        }
                    } while (zgadywana > max || zgadywana < min);
                    Console.WriteLine("Oczekiwanie na przeciwnika...");

                    komunikat.SetLiczba(Convert.ToString(zgadywana, 2).PadLeft(8, '0'));
                    komunikat.SetOp("000110");//Zgadywana liczba
                    komunikat.GetBitArray().CopyTo(bytes, 0);
                    stream.Write(bytes, 0, bytes.Length);

                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        komunikat.Resetruj();
                        komunikat.ustaw(bytes);
                        if (komunikat.GetOp() == "000111")
                        {
                            switch (komunikat.GetOdp())
                            {
                            case "001":
                            {
                                Console.WriteLine("Wygrales!");
                                stream.Close();
                                client.Close();
                                Console.ReadKey();
                                Environment.Exit(0);
                                break;
                            }

                            case "010":
                            {
                                Console.WriteLine("Podana liczba jest za duza!");
                                break;
                            }

                            case "011":
                            {
                                Console.WriteLine("Podana liczba jest za mala!");
                                break;
                            }

                            case "100":
                            {
                                Console.WriteLine("Twoj przeciwnik wygrywa!");
                                stream.Close();
                                client.Close();
                                Console.ReadKey();
                                Environment.Exit(0);
                                break;
                            }

                            case "101":
                            {
                                Console.WriteLine("Remis!");
                                stream.Close();
                                client.Close();
                                Console.ReadKey();
                                Environment.Exit(0);
                                break;
                            }
                            }
                        }
                        break;
                    }
                }
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("ArgumentNullException: {0}", e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }

            Console.WriteLine("\n Nacisnij enter aby kontynuowac...");
            Console.Read();
        }