Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpSoSrv 483 of 509 menu
◀ ▶

Сервер сокета в C#

Сервер TCP в C# - это TcpListener на выбранном адресе и порту.

После Start метод AcceptTcpClientAsync ждёт клиента и возвращает TcpClient. Чтение и запись идут через NetworkStream; объекты закрывают через using.

Примем одного клиента по адресу 127.0.0.1 и порту 18080, прочитаем строку "hello" и отправим ответ с префиксом "echo: ":

using System.Net; using System.Net.Sockets; using System.Text; Task server = Task.Run(async () => { TcpListener listener = new(IPAddress.Loopback, 18080); listener.Start(); using TcpClient peer = await listener.AcceptTcpClientAsync(); using NetworkStream stream = peer.GetStream(); byte[] buf = new byte[256]; int n = await stream.ReadAsync(buf); string line = Encoding.UTF8.GetString(buf, 0, n).TrimEnd(); await stream.WriteAsync(Encoding.UTF8.GetBytes("echo: " + line + "\n")); Console.WriteLine("echo: " + line); // выведет "echo: hello" listener.Stop(); }); await Task.Delay(30); using TcpClient client = new(); await client.ConnectAsync("127.0.0.1", 18080); using NetworkStream stream = client.GetStream(); await stream.WriteAsync(Encoding.UTF8.GetBytes("hello\n")); await server;

Схема та же: один приём, одно чтение и один ответ. Во втором примере ответ печатает клиент. Сервер вернет строку с префиксом "ok: ":

using System.Net; using System.Net.Sockets; using System.Text; Task server = Task.Run(async () => { TcpListener listener = new(IPAddress.Loopback, 18080); listener.Start(); using TcpClient peer = await listener.AcceptTcpClientAsync(); using NetworkStream stream = peer.GetStream(); byte[] buf = new byte[256]; int n = await stream.ReadAsync(buf); string line = Encoding.UTF8.GetString(buf, 0, n).TrimEnd(); await stream.WriteAsync(Encoding.UTF8.GetBytes("ok: " + line + "\n")); listener.Stop(); }); await Task.Delay(30); using TcpClient client = new(); await client.ConnectAsync("127.0.0.1", 18080); using NetworkStream stream = client.GetStream(); await stream.WriteAsync(Encoding.UTF8.GetBytes("ready\n")); byte[] buf = new byte[256]; int got = await stream.ReadAsync(buf); Console.WriteLine(Encoding.UTF8.GetString(buf, 0, got).TrimEnd()); // выведет "ok: ready" await server;

Отправьте серверу строку "ask\n" и выведите в консоли клиента ответ "answer: ask".

Получив строку "ping", верните клиенту "pong" и выведите ее в консоли клиента.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить