使用c#实现TCP客户端与服务器端

1、实现客户端:

(1)、 首先创建一个TCP客户端类:

这个类将包含连接到服务器、发送数据和接收数据的方法。

csharp 复制代码
using System;
using System.Net.Sockets;
using System.Text;
 
public class TcpClientExample
{
    private TcpClient client;
    private NetworkStream stream;
 
    public TcpClientExample(string server, int port)
    {
        client = new TcpClient(server, port);
        stream = client.GetStream();
    }
 
 	//发送
    public void SendData(string data)
    {
        byte[] dataToSend = Encoding.ASCII.GetBytes(data);
        stream.Write(dataToSend, 0, dataToSend.Length);
        Console.WriteLine($"Sent: {data}");
    }
 	//接收
    public string ReceiveData()
    {
        byte[] buffer = new byte[256];
        int bytesRead = stream.Read(buffer, 0, buffer.Length);
        string responseData = Encoding.ASCII.GetString(buffer, 0, bytesRead);
        Console.WriteLine($"Received: {responseData}");
        return responseData;
    }
 	//关闭连接
    public void CloseConnection()
    {
        stream.Close();
        client.Close();
    }
}

(2、使用TCP客户端类:

实例化这个类并使用它的方法来与服务器进行通信。

csharp 复制代码
class Program
{
    static void Main(string[] args)
    {
        string server = "127.0.0.1"; // 服务器的IP地址
        int port = 5000;            // 服务器的端口号
 
        TcpClientExample tcpClient = new TcpClientExample(server, port);
 
        try
        {
            // 发送数据到服务器
            tcpClient.SendData("Hello, Server!");
 
            // 从服务器接收数据
            string response = tcpClient.ReceiveData();
 
            // 显示从服务器接收到的数据
            Console.WriteLine($"Server Response: {response}");
        }
        catch (Exception e)
        {
            Console.WriteLine($"An error occurred: {e.Message}");
        }
        finally
        {
            // 关闭连接
            tcpClient.CloseConnection();
        }
 
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}

2、实现服务器端:

(1)首先创建一个TCP服务器类:

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

public class TcpServer
{
    private TcpListener listener;
    private bool isRunning;
 
    public TcpServer(int port)
    {
        listener = new TcpListener(IPAddress.Any, port);
        isRunning = false;
    }
 
    public void Start()
    {
        listener.Start();
        isRunning = true;
        Console.WriteLine($"Server started on port {((IPEndPoint)listener.LocalEndpoint).Port}...");
 
        Task.Run(() => AcceptClientsAsync());
    }
 
    private async Task AcceptClientsAsync()
    {
        while (isRunning)
        {
            try
            {
                TcpClient client = await listener.AcceptTcpClientAsync();
                Console.WriteLine("Client connected.");
                HandleClientAsync(client);
            }
            catch (ObjectDisposedException)
            {
                // This exception may be thrown if the listener is stopped while accepting clients.
                break;
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error accepting client: {e.Message}");
            }
        }
    }
 
    private async Task HandleClientAsync(TcpClient client)
    {
        NetworkStream stream = client.GetStream();
        byte[] buffer = new byte[1024];
        int bytesRead;
 
        try
        {
            while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0)
            {
                string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                Console.WriteLine($"Received: {dataReceived}");
 
                // Send response to client
                string response = "Hello from server!";
                byte[] responseBytes = Encoding.ASCII.GetBytes(response);
                await stream.WriteAsync(responseBytes, 0, responseBytes.Length);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine($"Error handling client: {e.Message}");
        }
        finally
        {
            client.Close();
            Console.WriteLine("Client disconnected.");
        }
    }
 
    public void Stop()
    {
        isRunning = false;
        listener.Stop();
        Console.WriteLine("Server stopped.");
    }
}

(2)、实例化这个类并启动服务器:

csharp 复制代码
class Program
{
    static void Main(string[] args)
    {
        int port = 5000; // 服务器监听的端口号
        TcpServer server = new TcpServer(port);
 
        try
        {
            server.Start();
 
            Console.WriteLine("Press any key to stop the server...");
            Console.ReadKey();
        }
        finally
        {
            server.Stop();
        }
    }
}
相关推荐
津津有味道3 小时前
ISO18000-6C协议UHF6C超高频RFID读写C#源码
c#·uhf6c·超高频·iso18000-6c
白雪公主的后妈4 小时前
Auto CAD二次开发——创建圆弧对象
c#·cad二次开发·创建圆弧对象
weixin_307779136 小时前
C#程序实现将MySQL的存储过程转换为Azure Synapse Dedicated SQL Pool的T-SQL存储过程
c#·自动化·云计算·运维开发·azure
"菠萝"8 小时前
C#知识学习-018(方法参数传递)
学习·c#·1024程序员节
CiLerLinux9 小时前
第三章 FreeRTOS 任务相关 API 函数
开发语言·单片机·物联网·c#
.NET修仙日记9 小时前
C#/.NET 微服务架构:从入门到精通的完整学习路线
微服务·c#·.net·.net core·分布式架构·技术进阶
歪歪10019 小时前
在C#中详细介绍一下Visual Studio中如何使用数据可视化工具
开发语言·前端·c#·visual studio code·visual studio·1024程序员节
Eiceblue19 小时前
如何通过 C# 高效读写 Excel 工作表
c#·visual studio·1024程序员节
张人玉19 小时前
WPF 触发器详解:定义、种类与示例
c#·wpf·1024程序员节·布局控件
阿登林1 天前
C# .NET Core中Chart图表绘制与PDF导出
c#·1024程序员节