Ostatnio po raz pierwszy byłem zmuszony użyć klasy Socket pisząc testy jednostkowe sprawdzające komunikację między klientem a serwerem z użyciem Socketów. Standardowo można stworzyć nową instancję klasy Socket, następie wywołać Connect i po połączeniu z serwerem wysłać do niego odpowiednią wiadomość. Ja jednak postanowiłem skrócić sobie pracę używając klasy TcpClient, która generalnie jest pewnym "wrapperem" nad klasą Socket, dzięki której po prostu możemy sobie pisać szybciej i mniej. Przykładowo w konstruktorze tej klasy następuje połączenie poprzez socket z serwerem, więc już nie muszę wołać metody Connect(), co wydaje się być mega fajne. Dodatkowo klasa TcpClient ma właściwość Client, która zwraca typ Socket.
Sama komunikacja z klienta na serwer wygląda następująco:
using (Socket socket = new TcpClient(host, port).Client)
{ byte[] msg = Encoding.UTF8.GetBytes("This is a test"); byte[] bytes = new byte[256]; int bytesSent = socket.Send(msg); Assert.IsTrue(bytesSent > 0); int bytesReceived = socket.Receive(bytes); Assert.IsTrue(bytesReceived > 0); }