[编程语言][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}\"");
		}
	}
}
相关推荐
Sylvia-girl4 小时前
Java——抽象类
java·开发语言
Yana.nice6 小时前
Bash函数详解
开发语言·chrome·bash
江沉晚呤时7 小时前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
Oberon7 小时前
Avalonia硬配.NET Framework 4.8
c#·.net·avalonia·.net framework
tomorrow.hello8 小时前
Java并发测试工具
java·开发语言·测试工具
晓13138 小时前
JavaScript加强篇——第四章 日期对象与DOM节点(基础)
开发语言·前端·javascript
老胖闲聊8 小时前
Python I/O 库【输入输出】全面详解
开发语言·python
她说人狗殊途9 小时前
java.net.InetAddress
java·开发语言
天使day9 小时前
Cursor的使用
java·开发语言·ai
喵叔哟10 小时前
3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
c#·.netcore