fel
le

Stream kliens - univerzális

Készítsünk olyan socket stream alapú klienst, amely

  • felcsatlakozik a szerverre (adott ip címen és porton)
  • elolvassa és kijelzi a szervertől kapott üdvözlőszöveget
  • beolvas a billentyűzetről egy utasítást (string) és átküldi a szervernek
  • beolvassa a szervertől érkező választ, amely:
    • lehet OK, melyet a kliens kijelez
    • lehet ERR|<hibauzenet> melyet a kliens kijelez (pirossal)
    • lehet OK* mely azt jelzi hogy további sorok érkeznek a szervertől, melyet a kliens mind beolvas és kijelez, amíg az OK! nem érkezik, mely a sorok végét jelzi (nincs több adat)
    • lehet BYE ami azt jelzi, hogy a szerver befejezi a kommunikációt, így a kliens is kiléphet
    • egyéb válasz (amit a szervertől kap) ismeretlen, pirossal jelzi ki

A kliens forráskódja

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
 
namespace ConsoleApplication1
{
    class Kliens
    {
        const int portSzam = 54325; // 1024 .. 65535 kozotti szam
        const string ipCim = "127.0.0.1";
        //...................................................................
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.Blue;
            Console.Clear();
            //
            IPAddress ip = IPAddress.Parse(ipCim);
            TcpClient cl = new TcpClient();
            Console.WriteLine("konnektalas a szerver fele indul: {0}:{1}", ip.ToString(), portSzam);
            cl.Connect(ip, portSzam);
            Console.WriteLine("konnektalas sikerult!");
            StreamReader r = new StreamReader(cl.GetStream(), Encoding.UTF8);
            StreamWriter w = new StreamWriter(cl.GetStream(), Encoding.UTF8);
            //--------
            string udvozlet = r.ReadLine();
            Console.WriteLine("> {0}", udvozlet);
            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Gray;
                string s = Console.ReadLine();
                w.WriteLine(s);
                w.Flush();
                string v = r.ReadLine();
                if (v == "OK")
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("> OK");
                }
                else if (v.StartsWith("ERR"))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("> {0}", v);
                }
                else if (v == "OK*")
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("> -------- tobbsoros valasz eleje ----");
                    while (true)
                    {
                        string a = r.ReadLine();
                        if (a == "OK!") break;
                        Console.WriteLine("> {0}", a);
                    }
                    Console.WriteLine("> -------- vege ----------------------");
                }
                else if (v == "BYE") break;
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("ISMERETLEN VALASZ: {0}", v);
                }
            }
            Console.WriteLine("-- vege, nyomj <Enter>-t");
            Console.ReadLine();
        }
    }
}
 
Hernyák Zoltán
2013-04-15 14:00:07