[编程语言][C#]TcpListener与TcpClient
创始人
2024-11-15 04:33:04

TcpListener

program.cs

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

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 _Clients;  		public EchoServerListener(int port) 		{ 			_IPEndPoint = new IPEndPoint(IPAddress.Any, port); 			_Listener = new TcpListener(_IPEndPoint); 			_Clients = new List(); 		}  		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

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}\""); 		} 	} }  

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...