C# McProtocolTcp类: 实现基于TCP的Mc协议通信
C# McProtocolTcp类详解
本文介绍名为'McProtocolTcp'的C#类,它是用于处理TCP连接的Mc协议实现。该类继承自'McProtocolApp'类,并提供了一系列方法和属性来管理TCP连接和执行Mc协议命令。
属性
- Connected: 该属性指示TCP连接是否已建立。
- Client: 一个私有的'TcpClient'对象,用于管理TCP连接。
- Stream: 一个私有的'NetworkStream'对象,用于读写数据流。
构造函数
'McProtocolTcp'类提供了两个构造函数:
McProtocolTcp(): 使用默认参数初始化'McProtocolTcp'对象。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协议的应用程序。
原文地址: https://www.cveoy.top/t/topic/fRyG 著作权归作者所有。请勿转载和采集!