CMD
send_tex:
mode COM2: baud=9600 data=8 stop=1 parity=n ::串口相关参数
echo "hello,com" > COM2 ::发送文本
echo hello > COM2 ::发送文本
send_file:
mode COM2: baud=9600 data=8 stop=1 parity=n ::串口相关参数
copy file.txt COM2 ::发送文件
rec_file:
type COM2: > rec_file.txt ::需手动结束,将接收到的消息、文本内容,都写入rec_file.txt
传输文件
c# 接收示例
using System.IO.Ports;
using System.Text;
namespace ComTest
{
internal class Program
{
static void Main(string[] args)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
SerialPort serialPort = new SerialPort()
{
PortName = "COM2",
BaudRate = 9600,
Parity = Parity.None,
DataBits = 8,
StopBits = StopBits.One,
};
try
{
byte[] bs = new byte[1024];
serialPort.Open();
while (serialPort.IsOpen)
{
int v = serialPort.Read(bs, 0, 1024);
if (serialPort.BytesToRead == 0)
break;
Thread.Sleep(100);
}
//string msg=Encoding.GetEncoding("gb2312").GetString(bs);
string msg = Encoding.UTF8.GetString(bs);
Console.WriteLine(msg);
}
catch { }
}
}
}
读写分离:
using System.IO.Ports;
using System.Text;
namespace ComTest
{
internal class Program
{
static void Main(string[] args)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
SerialPort serialPort = new SerialPort()
{
PortName = "COM2",
BaudRate = 4800,
Parity = Parity.None,
DataBits = 8,
StopBits = StopBits.One,
};
try
{
List<Task> tasks = new List<Task>();
byte[] bs = new byte[1024];
serialPort.Open();
var t1 = Task.Run(() =>
{
R:
while (serialPort.IsOpen)
{
int v = serialPort.Read(bs, 0, 1024);
if (serialPort.BytesToRead == 0)
break;
Thread.Sleep(100);
}
//string msg=Encoding.GetEncoding("gb2312").GetString(bs);
string msg = Encoding.UTF8.GetString(bs);
Console.WriteLine(msg);
goto R;
});
tasks.Add(t1);
var t2 = Task.Run(() =>
{
while (serialPort.IsOpen)
{
serialPort.Write("hello msg");
Thread.Sleep(3000);
}
});
tasks.Add(t2);
Task.WaitAll(tasks.ToArray());
serialPort.Close();
}
catch { }
}
}
}
大文件发送:
using System.IO.Ports;
using System.Text;
namespace ComTest
{
internal class Program
{
static void Main(string[] args)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
SerialPort serialPort = new SerialPort()
{
PortName = "COM2",
BaudRate = 9600,
Parity = Parity.None,
DataBits = 8,
StopBits = StopBits.One,
};
try
{
List<Task> tasks = new List<Task>();
byte[] bs = new byte[4096];
serialPort.Open();
var t1 = Task.Run(() =>
{
R:
while (serialPort.IsOpen)
{
int v = serialPort.Read(bs, 0, 1024);
if (serialPort.BytesToRead == 0)
break;
Thread.Sleep(100);
}
//string msg=Encoding.GetEncoding("gb2312").GetString(bs);
string msg = Encoding.UTF8.GetString(bs);
Console.WriteLine(msg);
goto R;
});
tasks.Add(t1);
var t2 = Task.Run(() =>
{
//while (serialPort.IsOpen)
//{
// serialPort.Write("hello msg");
// Thread.Sleep(3000);
//}
Thread.Sleep(10000);
string msg = File.ReadAllText("send.txt");
//拆为200份,分割的文件要小于 传输限制
var msgs = SplitStringIntoParts(msg, 200);
msgs.ForEach(m =>
{
if (serialPort.IsOpen)
{
serialPort.Write(m);
Thread.Sleep(100);
}
Console.WriteLine("send file end");
});
});
tasks.Add(t2);
Task.WaitAll(tasks.ToArray());
serialPort.Close();
}
catch { }
}
static List<string> SplitStringIntoParts(string input, int partsCount)
{
List<string> parts = new List<string>();
int totalLength = input.Length;
int partLength = totalLength / partsCount;
int remainder = totalLength % partsCount;
int startIndex = 0;
for (int i = 0; i < partsCount; i++)
{
int currentPartLength = partLength + (i < remainder ? 1 : 0); // 处理余数
string part = input.Substring(startIndex, currentPartLength);
parts.Add(part);
startIndex += currentPartLength;
// 如果拆分的部分到达结尾,则退出
if (startIndex >= totalLength)
break;
}
return parts;
}
}
}