我现有的代码:

private void ConvertAndSend_Click(object sender, EventArgs e)
{
    if (serialPort.IsOpen)
    {
        byte[] TxBuffer = new byte[240];
        string[] coords = textBox1.Text.Split('\n');
        for (int i = 0; i <= coords.Length - 1; i++)
        {
            if (coords[i].Length > 0)
            {
                Data = GetValue(coords[i]);
            }
        }
        TxBuffer[0] = 0x5A;
        TxBuffer[1] = Instruction;
        TxBuffer[2] = (byte)Data.Length;
        Data.CopyTo(TxBuffer, 3);
        TxBuffer[Data.Length + 3] = 0x2C;
        serialPort.Write(TxBuffer, 0, 4 + Data.Length);
    }
}


现在,我将每个“数据”发送到单独的“ Txbuffer”中。例如如果我有多个“数据”,我将发送多个“ Txbuffer”。如何将所有“数据”合并为一个“ Txbuffer”并一次发送?

最佳答案

这并不是完全“错误”,尽管像240这样的魔术数字不会赢得任何奖赏。您还可以使用BinaryWriter,将SerialPort.BaseStream传递给其构造函数。

请记住,串行端口实现流,而不是“数据包”。只是原始字节序列,没有独特的开始和结束。就像TCP一样。除非您创建自己的框架协议,否则没有框架协议。你做了。由接收方决定将字节流变回一帧。传输时不存在相同的要求。

关于c# - 如何通过串行端口在一个缓冲区中发送所有数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25798628/

10-13 06:05