如何使用SerialPort类用Modena传输文件?? 用AT发送文件的指令搞不清楚!不知道Windows的超级终端是这么工作的!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 发送信息用Write()方法,如何发文件啊!!!!请教了!! private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { FileStream Save = new FileStream(@"E:/received.dat", FileMode.Append, FileAccess.Write); Byte[] array = new byte[1024]; int count = serialPort1.BytesToRead; serialPort1.Read(array, 0, count); Save.Write(array, 0, count); Save.Close(); } 这里所有的操作都是同步的,异步的我还没研究过。。 下面是发送端的代码: private void button1_Click(object sender, EventArgs e) { Byte[] arry = new Byte[100]; try { serialPort1.Open(); // serialPort2.Open(); // if (serialPort1.IsOpen) MessageBox.Show("Serial 1 opened"); } catch { MessageBox.Show("Port one open Failed"); } FileInfo file = new FileInfo(@"E:\test.BMP"); FileStream Send = new FileStream(@"E:\test.BMP", FileMode.Open, FileAccess.ReadWrite); for (int i = 0; i < Send.Length/100; i++) { Send.Read(arry, 0, 100); //线程挂起250mS // System.Threading.Thread.SpinWait(250); //Thread.sleep(int)也能使程序挂起。。不过容易让人感觉程序失去响应 serialPort1.Write(arry, 0, 100); } //每次向串口发送100个字节,最后再把不足100字节的结尾给发送过去 Send.Read(arry, 0,(int) (Send.Length%100)); serialPort1.Write(arry, 0, (int)(Send.Length % 100)); serialPort1.Close(); Send.Close(); } 请教javacaspnet大哥,还有两点不明白!1、为什么每次只发送100字节,不可以一次发送完整的所有字节吗?2、接收端怎么才能判断文件已经发送完毕,然后处理? 对于熟悉MSComm控件的程序设计者,SerialPort类是相当容易上手的。在进行串口通讯时,一般的流程是设置通讯端口号及波特率、数据位、停止位和校验位,再打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。 数据接收的设计方法在这里比较重要,采用轮询的方法比较浪费时间,在Visual Basic中的延时方法中一般会调用API并用DOEvents方法来处理,但程序不易控制,建议采用DataReceived事件触发的方法,合理的设 置ReceivedBytesThreshold的值,若接收的是定长的数据,则将ReceivedBytesThreshold设为接收数据的长度,若 接收数据的结尾是固定的字符或字符串则可采用ReadTo的方法或在DataReceived事件中判断接收的字符是否满足条件。 SerialPort类读取数据的许多方法是同步阻塞调用,尽量避免在主线程中调用,可以使用异步处理或线程间处理调用这些读取数据的方法。 由于DataReceived事件在辅线程被引发,当收到完整的一条数据,返回主线程处理或在窗体上显示时,请注意跨线程的处理,C#可采用控件异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。 学习C Sharp主要的目的就是为了给项目做一个PC端的界面,并且通过串口和所用的CC2430之间通信。C#里面的串口类非常好用,这里就不详细说了。。 下面是接收端的事件 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { FileStream Save = new FileStream(@"E:/received.dat", FileMode.Append, FileAccess.Write); Byte[] array = new byte[1024]; int count = serialPort1.BytesToRead; serialPort1.Read(array, 0, count); Save.Write(array, 0, count); Save.Close(); } 这里所有的操作都是同步的,异步的我还没研究过。。 下面是发送端的代码: private void button1_Click(object sender, EventArgs e) { Byte[] arry = new Byte[100]; try { serialPort1.Open(); // serialPort2.Open(); // if (serialPort1.IsOpen) MessageBox.Show("Serial 1 opened"); } catch { MessageBox.Show("Port one open Failed"); } FileInfo file = new FileInfo(@"E:\test.BMP"); FileStream Send = new FileStream(@"E:\test.BMP", FileMode.Open, FileAccess.ReadWrite); for (int i = 0; i < Send.Length/100; i++) { Send.Read(arry, 0, 100); //线程挂起250mS // System.Threading.Thread.SpinWait(250); //Thread.sleep(int)也能使程序挂起。。不过容易让人感觉程序失去响应 serialPort1.Write(arry, 0, 100); } //每次向串口发送100个字节,最后再把不足100字节的结尾给发送过去 Send.Read(arry, 0,(int) (Send.Length%100)); serialPort1.Write(arry, 0, (int)(Send.Length % 100)); serialPort1.Close(); Send.Close(); } 怪事,datagridview的列的序号,为何与实际不一致呢? RichTextBox中插入图片和文字时速度比较慢 C++转入C#的新手的一个问题 如何计算两字符数组的公共部分(含重复项) panel的IsMdiContainer问题 问一下。在WINFROM中,如何保存图片。。是SQL数据库。 在winform下DataGrid上的列名怎么能显示成汉字?除了用(select id as 序号)这种做法! 问一个很菜的问题 随机不重复取得编号的问题 非常急的一个问题 高手指点我这段代码哪里有问题,并指出如何修改,谢谢 怎样实现VS编辑器中tab控件(见图)
{
FileStream Save = new FileStream(@"E:/received.dat", FileMode.Append, FileAccess.Write);
Byte[] array = new byte[1024];
int count = serialPort1.BytesToRead;
serialPort1.Read(array, 0, count);
Save.Write(array, 0, count);
Save.Close();
} 这里所有的操作都是同步的,异步的我还没研究过。。 下面是发送端的代码: private void button1_Click(object sender, EventArgs e)
{
Byte[] arry = new Byte[100]; try
{
serialPort1.Open();
// serialPort2.Open();
// if (serialPort1.IsOpen) MessageBox.Show("Serial 1 opened");
}
catch
{
MessageBox.Show("Port one open Failed"); } FileInfo file = new FileInfo(@"E:\test.BMP");
FileStream Send = new FileStream(@"E:\test.BMP", FileMode.Open, FileAccess.ReadWrite); for (int i = 0; i < Send.Length/100; i++)
{
Send.Read(arry, 0, 100);
//线程挂起250mS
// System.Threading.Thread.SpinWait(250); //Thread.sleep(int)也能使程序挂起。。不过容易让人感觉程序失去响应
serialPort1.Write(arry, 0, 100);
} //每次向串口发送100个字节,最后再把不足100字节的结尾给发送过去
Send.Read(arry, 0,(int) (Send.Length%100));
serialPort1.Write(arry, 0, (int)(Send.Length % 100));
serialPort1.Close();
Send.Close(); }
请教javacaspnet大哥,还有两点不明白!
1、为什么每次只发送100字节,不可以一次发送完整的所有字节吗?
2、接收端怎么才能判断文件已经发送完毕,然后处理?
学习C Sharp主要的目的就是为了给项目做一个PC端的界面,并且通过串口和所用的CC2430之间通信。C#里面的串口类非常好用,这里就不详细说了。。 下面是接收端的事件 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
FileStream Save = new FileStream(@"E:/received.dat", FileMode.Append, FileAccess.Write);
Byte[] array = new byte[1024];
int count = serialPort1.BytesToRead;
serialPort1.Read(array, 0, count);
Save.Write(array, 0, count);
Save.Close();
} 这里所有的操作都是同步的,异步的我还没研究过。。 下面是发送端的代码: private void button1_Click(object sender, EventArgs e)
{
Byte[] arry = new Byte[100]; try
{
serialPort1.Open();
// serialPort2.Open();
// if (serialPort1.IsOpen) MessageBox.Show("Serial 1 opened");
}
catch
{
MessageBox.Show("Port one open Failed"); } FileInfo file = new FileInfo(@"E:\test.BMP");
FileStream Send = new FileStream(@"E:\test.BMP", FileMode.Open, FileAccess.ReadWrite); for (int i = 0; i < Send.Length/100; i++)
{
Send.Read(arry, 0, 100);
//线程挂起250mS
// System.Threading.Thread.SpinWait(250); //Thread.sleep(int)也能使程序挂起。。不过容易让人感觉程序失去响应
serialPort1.Write(arry, 0, 100);
} //每次向串口发送100个字节,最后再把不足100字节的结尾给发送过去
Send.Read(arry, 0,(int) (Send.Length%100));
serialPort1.Write(arry, 0, (int)(Send.Length % 100));
serialPort1.Close();
Send.Close(); }