导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

怎么用串口控件发送二进制文件

tcp8587 2009-08-14 08:39:27
RT,用微软的MSCOMM控件,怎么发送二进制的文件,比如发送一个EXE文件?
...全文
291 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcp8587 2009-10-30
呵呵,问题已经解决。

定制通信协议,加控制字符。
回复
tcp8587 2009-08-25
人气怎么这么低?

我现在是发送可以实现。

现在的问题是串口控件有一个字符就触发onmsocmmcom消息处理函数,本应该读到一个数据包后再进行处理。那如果在处理数据包的过程中,串口缓冲区收到数据,那么是继续处理还是返回响应消息处理函数?

还有一个,我是该把收到的数据全都存起来再进行处理还是边接收边处理,如果边接收边处理,那如果处理不及会不会有数据丢失。如果全部接收呢,那要是一个64M的文件,我不可能分配这么大的缓冲区把它先存起来,那效率是不是太低了点?
回复
tcp8587 2009-08-21
我定义了通信协议。

程序初始时都处于接收状态。

发送方先发一个请求包,接收方收到请求包后选择是否保存文件,是的话返回ACK,发送方开始发数据,不保存的话返回NAK,发送方停止处理,返回接收状态。

用的是控件实现,我在控件的ONCOMMSCOMM()消息响应函数中实现先判断接收到的包类型,再发送数据包。可是现在只能发出去请求包,接收方不反应。
回复
zoulie 2009-08-15
接受端收到数据就以2进制(打开的模式)写进文件,例如保存成sample.exe
回复
socoola 2009-08-15
收数据:给串口控件添加消息 
void CTest_mscommDlg::OnOnCommMscomm()
{
VARIANT m_input;
char *str,*str1;
int k,nEvent,i;
CString str2,m_RcvData;
nEvent=m_MSComm.GetCommEvent();
switch(nEvent)
{
case 2:
k=m_MSComm.GetInBufferCount(); //接收缓冲区的字符数目
if(k>0)
{
m_input=m_MSComm.GetInput();
str=(char*)(unsigned char*)m_input.parray->pvData;
}
i=0;
str1=str;
while(i {
i++;
str1++;
}
*str1='{post.content}';
str2=(const char*)str; //清除字符串中的不必要字符
m_RcvData=(const char *)str;
}
//数据显示处理
m_disp+=m_RcvData;
UpdateData(false);
回复
tcp8587 2009-08-15
呵呵,多谢楼上各位。我发送已经解决了。现在的问题是我发送一个二进制文件过去后接收方怎么还原。以EXE文件为例,我接收到的肯定要能运行。这个该怎么办?
回复
zgl7903 2009-08-15
分帧发送: 帧头 + 控制信息 + 数据 + 校验 + 帧尾
回复
zoulie 2009-08-14
将文件以2进制打开,读出来,然后发送
回复
danxuezx 2009-08-14
http://www.programfan.com/CLUB/archives/130/129343.html
http://www.china-askpro.com/msg42/qa84.shtml
回复
socoola 2009-08-14
SetInputMode(1)设置以二进制方式读写数据。
发送数据实例:

int i,Count;
CString m_SendData;
m_SendData="Hello!";
Count=m_SendData.GetLength();
CByteArray m_Array;

m_Array.RemoveAll();
m_Array.SetSize(Count);

for(i=0;i m_Array.SetAt(i,m_SendData[i]);
m_MSComm.SetOutput(COleVariant(m_Array));
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……