【发布时间】:2013-12-11 15:49:08
【问题描述】:
我目前正在尝试优化我在与串行端口通信并将其显示在其他设备上的程序中使用的代码。
在这种情况下,我有一个“服务器模块”,它创建一个 TcpListener 并接收数据并调用一个函数来发送和接收串行数据。并将其发送回客户端。
所以我目前在我的代码中做了很多转换,现在有一个请求如下。
因为它是一个 modbus 程序,所以我倾向于使用 HEX/Bytes 值来控制所有内容。
因此,我确实在字节和字符串之间进行了很多转换。
我想消除其中的一些,我从底部开始。开始不从串行端口上的字节转换为字符串并发送回字节,这样可以节省我的转换和发送三分之一的字节。
我想出了这个代码: 有没有比使用 Array.Resize 更聪明的方法,我尝试使用 List,但我无法让它正常工作,它保持为空。
while (TcpService_Listen)
{
if (TcpListener.Pending())
{
try
{
TcpClient TcpClient = TcpListener.AcceptTcpClient();
NetworkStream TcpStream = TcpClient.GetStream();
if (TcpStream.CanRead)
{
//List<byte> list = new List<byte>(4096);
//Console.Write(list.Count);
byte[] TcpReceiveBytes = new byte[TcpClient.ReceiveBufferSize];
int TcpNumBytes = TcpStream.Read(TcpReceiveBytes, 0, TcpClient.ReceiveBufferSize);
Array.Resize(ref TcpReceiveBytes, TcpNumBytes);
Console.WriteLine("TcpReceiveBytes: " + BitConverter.ToString(TcpReceiveBytes));
byte[] TcpResponseBytes = new byte[0];
SendReceive(TcpReceiveBytes, ref TcpResponseBytes);
TcpStream.Write(TcpResponseBytes, 0, TcpResponseBytes.Length);
Console.WriteLine("TcpResponseBytes: " + BitConverter.ToString(TcpResponseBytes));
}
TcpStream.Close();
TcpClient.Close();
}
catch (Exception ex)
{
Console.Write("ERROR:TCPDATA:" + ex.Message);
}
}
}
private static void SendReceive(byte[] byteRequest, ref byte[] byteResponse)
{ //blabla send and receive stuff on serialPort ... }
【问题讨论】:
标签: c# optimization modbus