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:

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 1129x (40.35 kB)
Aplikace je včetně zdrojových kódů v jazyce C#