Сетевой поток TCP в C#
Поток байтов сокета получают методом GetStream.
NetworkStream наследует Stream: в него
пишут и из него читают, а using закрывает поток
вместе с клиентом. Ниже клиент отправляет "go",
сервер отвечает "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];
await stream.ReadAsync(buf);
await stream.WriteAsync(Encoding.UTF8.GetBytes("ok\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("go\n"));
byte[] buf = new byte[256];
int n = await stream.ReadAsync(buf);
Console.WriteLine(Encoding.UTF8.GetString(buf, 0, n).TrimEnd());
await server;