[C#] Połączenie TCP

W tym poście opiszę sposób na komunikacje poprzez protokół TCP.
Od ustanowienia połączenia poprzez wysyłanie danych.

-----------------------------------------SERWER----------------------------------------------------------
na początku warto dodać te biblioteki do naszego projektu:


using System.Net.Sockets;
using System.Net;
using System.Runtime.Serialization.Formatters.Binary;

teraz możemy przejść to utworzenia listener`a czyli klasy słuzacej do odbierania przychodzących do nas połączeń internetowych:


TcpListener listener = new TcpListener(IPAddress.Any, 1024); // nasz serwer
           


Uruchamiamy funkcję nasłuchową listenera instrukcją:

listener.Start();

Gdy mamy dobrze skonfigurowany nasz TcpListener kolej na klasę TcpClient który będzie przechowywał połączonych przez nas klientów. Możemy od razu do niej przypisać klienta gdy takowy się pojawi instrukcją:


TcpClient newClient = listener.AcceptTcpClient(); 



Jest to metoda synchroniczna więc powyższa instrukcja będzie trwać aż do czasu gdy ktoś nie połączy się z nami. Istnieje jeszcze opcja asynchroniczna ale o niej w następnym "artykule".
Żeby móc się komunikować z innym clientem musimy pobrać jego strumień z klasy TcpClient:


NetworkStream stream = newClient.GetStream();



Teraz musimy utworzyć 2 klasy: do wysyłania danych binarnych i  ich odbierania(jeśli chcemy możemy korzystać tylko z jednej z nich albo typ binarny możemy zmienić na xml)




BinaryReader reader = new BinaryReader(stream); 

BinaryWriter writer = new BinaryWriter(stream); 


Od teraz możemy komunikować się z klientem/serwerem poprzez funkcję w klasach  i  np.:



reader.ReadString()
writer.Write("wysyłam to co teraz napisałem");


Po skończeniu komunikacji zamykamy clienta instrukcją:


newClient.Close();

---------------------------------------CLIENT--------------------------------------------- 
Aby połączyć się z serwerem także użyjemy klasy TcpClient:



TcpClient client;


Tworzymy jej nową instancję:



client = new TcpClient();


a także adres serwera z którym chcemy się skomunikować:



IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);

IPEndPoint - opis klasy
następnie łączymy się z serwerem:



client.Connect(serverEndPoint);


a potem pobieramy strumień transmisji:



NetworkStream clientStream = client.GetStream();


Komunikacja pomiędzy clientami została opisana w końcowej cześci Serwera więc nie będę do niej powracał.

Pozdrawiam.