Síťování: server side

V minulosti jsme si vytvořili program, který se dokázal připojit na server a číst z něho data. Dnes si vytvoříme server.

Na našem příkladu si ukážeme server, kam se uživatel připojí, odešle zprávu a server mu ji vrátí. Pro otestování můžete použít program netcat, který jsme si dříve ukazovali.

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        // Definice portu, na kterém bude server naslouchat
        int port = 4444;

        // Vytvoření TcpListeneru
        TcpListener server = null;
        try
        {
            // Naslouchání na všech síťových rozhraních na daném portu
            IPAddress localAddr = IPAddress.Any;
            server = new TcpListener(localAddr, port);

            // Start serveru
            server.Start();

            Console.WriteLine($"Listening on port {port}...");

            // Čekání na připojení klienta
            TcpClient client = server.AcceptTcpClient();
            Console.WriteLine("Client connected!");

            // Získání dat ze vstupního streamu klienta
            NetworkStream stream = client.GetStream();

            // Vytvoření proměnných pro uložení příchozích dat
            byte[] data = new byte[256];
            int bytes;

            // Čtení dat ze streamu
            while ((bytes = stream.Read(data, 0, data.Length)) != 0)
            {
                string responseData = Encoding.ASCII.GetString(data, 0, bytes); // Převod dat na řetězec
                Console.WriteLine($"Received message: {responseData}"); // Vypsání výstupu do konzole serverz

                // Odpověď na klienta
                byte[] msg = Encoding.ASCII.GetBytes($"Server: message received: {responseData}"); // Převod stringu na formát pro odeslání
                stream.Write(msg, 0, msg.Length); // Odeslání odpovědi
                Console.WriteLine("Answered");
                return; // Ukončení while - pokud chcete aby mohl uživatel napsat více zpráv, můžete odebrat
            }

            // Uzavření připojení
            client.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine($"Error: {e.Message}");
        }
        finally
        {
            // Uzavření serveru
            server.Stop();
        }

        Console.WriteLine("Server closed.");
    }
}

Zadání

Vytvořte podobný server, kam se uživatel připojí a odešle dvě čísla oddělená mezerou. Server mu vrátí součet.

Příliš snadné?

Zkuste vymyslet a vytvořit nějaký zajímavý projekt, který bude běžet jako server. Pokud to bude funkční, a budete chtít, můžu vám ho nechat běžet na serveru.