C# McProtocolTcp类详解

本文介绍名为'McProtocolTcp'的C#类,它是用于处理TCP连接的Mc协议实现。该类继承自'McProtocolApp'类,并提供了一系列方法和属性来管理TCP连接和执行Mc协议命令。

属性

  • Connected: 该属性指示TCP连接是否已建立。
  • Client: 一个私有的'TcpClient'对象,用于管理TCP连接。
  • Stream: 一个私有的'NetworkStream'对象,用于读写数据流。

构造函数

'McProtocolTcp'类提供了两个构造函数:

  1. McProtocolTcp(): 使用默认参数初始化'McProtocolTcp'对象。
  2. McProtocolTcp(string iHostName, int iPortNumber, McFrame frame): 使用指定的hostname, 端口号和'McFrame'对象初始化'McProtocolTcp'对象。

方法

  • DoConnect(): 该方法尝试建立TCP连接。如果连接不成功,会抛出异常。
  • DoDisconnect(): 该方法断开已建立的TCP连接。
  • Execute(byte[] iCommand): 该方法在已建立的TCP连接上执行指定的Mc协议命令。

代码示例

public class McProtocolTcp : McProtocolApp
{
    public override bool Connected => Client.Connected;

    private TcpClient Client { get; set; }

    private NetworkStream Stream { get; set; }

    public McProtocolTcp()
        : this('', 0, McFrame.MC3E)
    {
    }

    public McProtocolTcp(string iHostName, int iPortNumber, McFrame frame)
        : base(iHostName, iPortNumber, frame)
    {
        base.CommandFrame = frame;
        Client = new TcpClient();
    }

    protected override async Task<int> DoConnect()
    {
        if (!Client.Connected)
        {
            List<byte> list = new List<byte>(12);
            list.AddRange(BitConverter.GetBytes(1u));
            list.AddRange(BitConverter.GetBytes(45000u));
            list.AddRange(BitConverter.GetBytes(5000u));
            Client.Client.IOControl(IOControlCode.KeepAliveValues, list.ToArray(), null);
            Client.Connect(base.HostName, base.PortNumber);
            Stream = Client.GetStream();
        }

        return 0;
    }

    protected override void DoDisconnect()
    {
        TcpClient client = Client;
        if (client.Connected)
        {
            client.Close();
        }
    }

    protected override async Task<byte[]> Execute(byte[] iCommand)
    {
        new List<byte>();
        NetworkStream stream = Stream;
        stream.Write(iCommand, 0, iCommand.Length);
        stream.Flush();
        using MemoryStream memoryStream = new MemoryStream();
        byte[] array = new byte[256];
        do
        {
            int num = stream.Read(array, 0, array.Length);
            if (num == 0)
            {
                throw new Exception('切断されました');
            }

            memoryStream.Write(array, 0, num);
        } while (stream.DataAvailable);
        return memoryStream.ToArray();
    }
}

总结

'McProtocolTcp'类提供了一个简单易用的接口,用于在.NET应用程序中实现基于TCP的Mc协议通信。了解其属性和方法,可以帮助开发者快速构建基于Mc协议的应用程序。

C# McProtocolTcp类: 实现基于TCP的Mc协议通信

原文地址: https://www.cveoy.top/t/topic/fRyG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录