[编程语言][C#]TcpListener与TcpClient

TcpListener

program.cs

csharp 复制代码
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace TCPListener
{
	internal class Program
	{
		static async Task Main(string[] args)
		{
			EchoServerListener listener = new EchoServerListener(28888);
			listener.Start();

			while (true)
			{
			}
		}
	}
}

TCPListener.cs

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace TCPListener
{
	class Client
	{
		public TcpClient TcpClient { get; private set; }
		public NetworkStream Stream { get; private set; }
		public int BufferSize { get; private set; }
		public byte[] Buffer { get; private set; }

		public Client(TcpClient tcpClient, NetworkStream stream, int bufferSize = 1024)
		{
			TcpClient = tcpClient;
			Stream = stream;
			BufferSize = bufferSize;
			Buffer = new byte[BufferSize];
		}
	}

	internal class EchoServerListener
	{
		private readonly IPEndPoint _IPEndPoint;
		private readonly TcpListener _Listener;
		private readonly List<Client> _Clients;

		public EchoServerListener(int port)
		{
			_IPEndPoint = new IPEndPoint(IPAddress.Any, port);
			_Listener = new TcpListener(_IPEndPoint);
			_Clients = new List<Client>();
		}

		public async void Start()
		{
			try
			{
				_Listener.Start();

				try
				{
					while (true)
					{
						using TcpClient tcpClient = await _Listener.AcceptTcpClientAsync();
						await using NetworkStream stream = tcpClient.GetStream();
						Client client = new Client(tcpClient, stream);
						_Clients.Add(client);

						string message = "Who are you?";
						Encoding.UTF8.GetBytes(message, 0, message.Length, client.Buffer, 0);
						await stream.WriteAsync(client.Buffer, 0, message.Length);

						int received = await stream.ReadAsync(client.Buffer);
						message = Encoding.UTF8.GetString(client.Buffer, 0, received);

						message = $"Hello, {message}!";
						Encoding.UTF8.GetBytes(message, 0, message.Length, client.Buffer, 0);
						await stream.WriteAsync(client.Buffer, 0, message.Length);
					}
				}
				catch
				{

				}
			}
			finally
			{
				_Listener.Stop();
			}
		}

		public void Stop()
		{
			_Listener.Stop();
		}
	}
}

TcpClient

Program.cs

csharp 复制代码
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace TCPClient
{
	internal class Program
	{
		static async Task Main(string[] args)
		{
			using TcpClient tcpClient = new TcpClient("localhost", 28888);
			await using NetworkStream stream = tcpClient.GetStream();

			byte[] buffer = new byte[1024];
			int received = await stream.ReadAsync(buffer);
			string message = Encoding.UTF8.GetString(buffer, 0, received);
			Console.WriteLine($"[Server] \"{message}\"");

			message = Console.ReadLine();
			byte[] bytes = Encoding.UTF8.GetBytes(message);
			await stream.WriteAsync(bytes);

			received = await stream.ReadAsync(buffer);
			message = Encoding.UTF8.GetString(buffer, 0, received);
			Console.WriteLine($"[Server] \"{message}\"");
		}
	}
}
相关推荐
wn531几秒前
【Go - 类型断言】
服务器·开发语言·后端·golang
Hello-Mr.Wang12 分钟前
vue3中开发引导页的方法
开发语言·前端·javascript
救救孩子把15 分钟前
Java基础之IO流
java·开发语言
WG_1716 分钟前
C++多态
开发语言·c++·面试
时光追逐者18 分钟前
分享6个.NET开源的AI和LLM相关项目框架
人工智能·microsoft·ai·c#·.net·.netcore
宇卿.23 分钟前
Java键盘输入语句
java·开发语言
Amo Xiang33 分钟前
2024 Python3.10 系统入门+进阶(十五):文件及目录操作
开发语言·python
friklogff1 小时前
【C#生态园】提升C#开发效率:深入了解自然语言处理库与工具
开发语言·c#·区块链
重生之我在20年代敲代码2 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring