Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - TCP připojení v C# .NET

V minulé lekci, Využití API v C# .NET, jsme si ukázali základy práce s API. Zavolali jsme API server z C# .NET a zpracovali přijatá data.

V dnešním tutoriálu si popíšeme TCP připojení v jazyce C# .NET. Vytvoříme si jednoduchý server a klienta. Zkusíme odeslat zprávu.

Popíšeme si metodu připojení Client / Server. To znamená, že si vytvoříme nějaký jednoduchý server, který bude naslouchat na nějakém portu. K tomu si vytvoříme nějakého jednoduchého klienta, který nám bude data odesílat na server na portu, kterému bude server naslouchat.

Teorie TCP připojení

TCP (Transmission Control Protocol) je služba, která je spolehlivá na rozdíl od služby UDP. TCP připojení se pojí se serverem nebo klientem tak, že naváže spojení na 3x a ukončuje spojení na 4x. V realném životě by to mohlo vypadat nějak takto:

Navázání spojení:

klient : Ahoj, tady klient!
server : Ahoj, tady server. Co potřebuješ?
klient : Chtěl bych odeslat nějaká data, tak mi prosím naslouchej. :)
klient -> odesílá data...

Ukončení spojení:

klient : Ahoj, chtěl bych ukončit spojení.
server : Okay, opravdu chceš spojení ukončit?
klient : Ano, opravdu chci.
server : Dobře, ukončují spojení.

Implementace TCP připojení

Nejprve si přidáme tyto jmenné prostory:

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

Server

Jako první si vytvoříme server:

static byte[] data;  // 1
static Socket socket; // 1
static void Main(string[] args)
{
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 2
    socket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666)); // 3

    socket.Listen(1); // 4
    Socket accepteddata = socket.Accept(); // 5
    data = new byte[accepteddata.SendBufferSize]; // 6
    int j = accepteddata.Receive(data); // 7
    byte[] adata = new byte[j];         // 7
    for (int i = 0; i < j; i++)         // 7
        adata[i] = data[i];             // 7
    string dat = Encoding.Default.GetString(adata); // 8
    Console.WriteLine(dat);                         // 8
}

Nejprve jsme si vytvořili statické proměnné data typu byte a socket typu Socket. Dále budeme pokračovat v metodě Main().

Do proměnné socket si vložíme instanci třídy Socket, v jejímž konstruktoru typ našeho socketu ProtocolType.Tcp. Dále si vytvoříme nový IPEndPoint, což je cílová adresa, kterou chceme hostovat. V našem případě je to localhost. V metodě Bind() přiřazujeme připojení k IP adrese 127.0.0.1 a portu 6666.

V metodě Listen() povolíme počet možných naslouchajících uživatelů. V našem případě je to jen jeden. Poté jsme si vytvořili novou instanci accepteddata typu Socket. Do proměnné data si ukládáme příchozí data. Následně přeuložíme příchozí data do nové proměnné, abychom stále nedekódovali přicházející data. Nakonec dekódujeme data pomocí metody Default() a pak už jen vypisujeme data na obrazovku.

Klient

Server už máme. Pustíme se tedy do klienta, ten je obzvlášť jednoduchý:

using System.Net;
using System.Net.Sockets;
static void Main(string[] args)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try // 1
            {
                s.Connect(IPAddress.Parse("127.0.0.1"), 6666); // 2
                Console.Write("Zadej nejakej text : ");
                string q = Console.ReadLine();                 // 3
                byte[] data = Encoding.Default.GetBytes(q);    // 3
                s.Send(data);
            }
            catch // 1
            {
                // nepripojeno
            }
        }

To co je zde jinak, než u serveru, si vysvětlíme.

Nejprve se zkoušíme připojit na server pomocí metody Connect(), v které si opět naparsujeme IP adresu z textového řetězce a zadáme náš port 6666, který server naslouchá. Zadaný text uživatelem si poté uložíme do proměnné data a zakódujeme ho pomocí metody Default(). Nakonec data odešleme na server. :)

Výsledek vypadá takto:

asd - Síť v C# .NET

V příští lekci, FTP výpis souborů ze složky v C# .NET, si ukážeme využití streamu k vypsání souborů ze složky na FTP serveru do komponenty ListBox.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1113x (40.35 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Využití API v C# .NET
Všechny články v sekci
Síť v C# .NET
Přeskočit článek
(nedoporučujeme)
FTP výpis souborů ze složky v C# .NET
Článek pro vás napsal Зайчик
Avatar
Uživatelské hodnocení:
9 hlasů
Коммунизм для нашего будущего!
Aktivity