WebElektronika

TCP Szerver megvalósítása .NET környezetben

person access_time 2016.02.15.
Korábban többször foglalkoztunk webszolgáltatásokkal, terítékre került a WCF is. Most a TcpListener osztály segítségével létrehozunk egy TCP szervert, pár nap múlva pedig az ehhez tartozó klienst készítjük el.


Indítsuk el a Visual Studio-t (például a VS2012), és hozzunk létre egy új Console-os projektet (1. ábra). Az alkalmazásunk neve : ConsoleTCPServer.

kep
1. ábra   A projekt létrehozása
 

A Program osztályban található Main() metódust egészítsük ki a következő programrészlettel.

Private, egész típusú változóban megadjuk a használni kívánt portszámot (8080), majd kivételkezelést használva parse-oljuk a localhost IP címét.
Ezután létrehozunk egy TCP listener-t weListener néven, majd ezt elindítjuk, amiról tájékoztatjuk is a felhasználót.
A Console-ra történő kiírás után várakozunk a kliens csatlakozására. Amikor ez megtörténik, kiírjuk a Console-ra a végpontot.

class Program
    {
        public static void Main()
        {
            int portszam = 8080;
            try
            {
                IPAddress ipAd = IPAddress.Parse("127.0.0.1");

                // Listener létrehozása
                TcpListener weListener = new TcpListener(ipAd, portszam);

                // elindítjuk a listenert a megadott ip-n, porton
                weListener.Start();

                Console.WriteLine("Működik ezen a porton : " + portszam);
                Console.WriteLine("Végpont : " + weListener.LocalEndpoint);
                Console.WriteLine("Várakozunk");

                // várakozunk a kliensre
                Socket sck = weListener.AcceptSocket();
                Console.WriteLine("Kapcsolódva : " + sck.RemoteEndPoint);

                byte[] tomb = new byte[50];
                int darab = sck.Receive(tomb);
                
                Console.WriteLine("Fogadott...");
                for (int i = 0; i < darab; i++)
                    Console.Write((char)(tomb[i]));

                sck.Close();
                weListener.Stop();
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadLine();
        }
    }

 

Vannak olyan névterek, szerelvények, amelyek "alapból" nem találhatók meg a Program osztályban. Ezeket vegyük fel (2. ábra).

kep
2. ábra   A szükséges névterek hozzáadása az osztályhoz
 

Ezután indítsuk el a programunkat debug módban. Az alkalmazásunk a localhost-on a 8080-as porton figyeli a kliens (későbbi cikk) "bejelentkezését" (3. ábra).

kep
3. ábra   Várakozunk a kliens csatlakozására
 

Amikor a klienst elindítjuk, akkor a szerverünk kiírja, hogy a kapcsolódás megtörtént (4. ábra).

kep
4. ábra   A kliens csatlakozott a szerverhez
 

Amikor a kliensnél beírunk egy maximum 50 karakteres string-et, akkor az Enter leütése után a szerveren megjelenik a kliensben beírt szöveg (5. ábra).

kep
5. ábra   A kliens által küldött adatokat megjelenítjük a szerveren
 

A Console.ReadLine(); miatt nem lépünk ki rögtön a programból, hanem megvárjuk az Enter leütését.