0
点赞
收藏
分享

微信扫一扫

.NET Core socket封装 博客园

Hyggelook 2023-07-23 阅读 48

.NET Core Socket 封装

Socket 是网络编程中常用的一种编程接口,它提供了一种在网络上进行通信的机制。在 .NET Core 中,我们可以使用 Socket 类来进行网络编程,但是 Socket 类的接口相对底层,使用起来有一定的复杂度。

为了简化 Socket 的使用,我们可以对 Socket 进行封装,封装出更高级别的接口,使得我们在编写网络程序时更加方便。在本文中,将会介绍如何对 .NET Core Socket 进行封装,并提供一个示例代码。

封装 Socket 类

我们可以通过创建一个名为 SocketHelper 的类来封装 .NET Core 的 Socket 类:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class SocketHelper
{
    private Socket serverSocket;

    public void StartServer(int port)
    {
        // 创建 Socket
        serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 绑定 IP 地址和端口号
        serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));

        // 开始监听
        serverSocket.Listen(10);

        // 接收连接请求
        serverSocket.BeginAccept(AcceptCallback, null);
    }

    private void AcceptCallback(IAsyncResult ar)
    {
        // 获取客户端 Socket
        Socket clientSocket = serverSocket.EndAccept(ar);

        // 继续监听
        serverSocket.BeginAccept(AcceptCallback, null);

        // 接收客户端数据
        byte[] buffer = new byte[1024];
        clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, clientSocket);
    }

    private void ReceiveCallback(IAsyncResult ar)
    {
        // 获取客户端 Socket
        Socket clientSocket = (Socket)ar.AsyncState;

        // 接收数据
        int bytesRead = clientSocket.EndReceive(ar);
        byte[] buffer = new byte[bytesRead];
        Array.Copy(buffer, buffer, bytesRead);

        // 处理数据
        string message = Encoding.UTF8.GetString(buffer);
        Console.WriteLine("Received message: " + message);

        // 继续接收数据
        clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, clientSocket);
    }

    public void StopServer()
    {
        serverSocket.Close();
    }

    public void SendMessage(string ipAddress, int port, string message)
    {
        // 创建 Socket
        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 连接服务器
        clientSocket.Connect(new IPEndPoint(IPAddress.Parse(ipAddress), port));

        // 发送数据
        byte[] buffer = Encoding.UTF8.GetBytes(message);
        clientSocket.Send(buffer);

        // 关闭连接
        clientSocket.Close();
    }
}

使用封装的 Socket 类

我们可以在应用程序中使用封装的 Socket 类来实现网络通信。以下是一个简单的示例,展示了如何使用封装的 Socket 类来创建一个服务器,接收客户端发送的消息,并向客户端返回消息:

using System;

class Program
{
    static void Main(string[] args)
    {
        SocketHelper socketHelper = new SocketHelper();
        socketHelper.StartServer(8888);

        Console.WriteLine("Server started. Listening on port 8888.");

        string input = Console.ReadLine();
        while (input != "exit")
        {
            socketHelper.SendMessage("127.0.0.1", 8888, input);
            input = Console.ReadLine();
        }

        socketHelper.StopServer();
    }
}

在上述示例中,我们通过 StartServer 方法启动了一个服务器,监听在本地的 8888 端口。当客户端连接到服务器并发送消息时,服务器会接收到消息并打印出来。我们可以通过 SendMessage 方法向服务器发送消息。

结论

通过将 Socket 类进行封装,我们可以简化网络编程的复杂度,使得我们在编写网络程序时更加方便。希望本文能够对你理解和使用 .NET Core Socket 封装提供一些帮助。

以上就是对 .NET Core Socket 封装的科普介绍,希望对读者有所帮助。

举报

相关推荐

0 条评论