[编程语言][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}\"");
		}
	}
}
相关推荐
玩泥巴的1 小时前
MAF + 飞书:让大模型干活,但别让它乱干
ai·c#·.net·飞书·agent
WJ.Polar4 小时前
Java封装、继承、多态
java·开发语言
摇滚侠4 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_307779134 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
爱读书的小胖4 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
鸽鸽程序猿4 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
Lhappy嘻嘻4 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
cpp_w5 小时前
C#基础3- 面向对象中级应用3
后端·c#
weixin_307779135 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
鸽鸽程序猿5 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言