读书人

串口文件传输的有关问题

发布时间: 2012-08-02 11:35:26 作者: rapoo

串口文件传输的问题
已经成功的把文件名传过去了,并创建了对应的文件。但文件的内容没传过去~ 问题不知道在哪~ 希望高手提点一下~

void CFileuploadDlg::OnButtonSendfile() //点击发送文件按钮,发送文件
{
if(m_nSendFileState==1)
{
m_nSendFileState=0;
}
else
{
m_nHeadFlag=0;
m_nCurSendBlock=0;
FullSendBuffer(m_nCurSendBlock); //调用发送缓冲区内数据的函数
m_ctrlEditSendFile.SetWindowText("正在发送......");
}
}





void CFileuploadDlg::FullSendBuffer(int Block) //发送缓冲区内数据的函数
{
if(Block==0)
{
//第0块,要读一个文件

……
//计算需要多少块才能发完
m_nCurMaxBlock=(nlength-1)/BLOCK_SIZE+1; //BLOCK_SIZE为8192

……

//进入发送文件状态,需要处理SendOver消息
m_nSendFileState=1;
m_port.WriteToPort(headstr,81);

}
else
{
unsigned char *tempbuffer;
tempbuffer=new unsigned char[BLOCK_SIZE+20];

for(DWORD i=0;i <8;i++)
tempbuffer[i]='$';
tempbuffer[8]=2;

m_file.Seek((Block-1)*BLOCK_SIZE,CFile::begin);
DWORD tt=m_file.ReadHuge(tempbuffer,BLOCK_SIZE);
DWORD xx=tt;

if(Block==m_nCurMaxBlock)
{
m_file.Close();
}

if(Block==1)
{
//需要加一个前导串
for(DWORD i=tt-1;i>=0;i--)
{
tempbuffer[i+9]=tempbuffer[i];
if(i==0) break;
}

for(i=0;i <8;i++)
tempbuffer[i]='$';
tempbuffer[8]=2;
tt +=9;

}
m_port.WriteToPort(tempbuffer,tt);

delete [] tempbuffer;
tempbuffer = NULL;

char ss[10];
wsprintf(ss,"%d",(Block-1)*BLOCK_SIZE+xx);

}
}


//检测文件是否发送完毕
void CFileuploadDlg::OnSendOver(WPARAM ch, LPARAM port)
{
// TODO: Add your control notification handler code here
if(m_nSendFileState==1)
{
//发送完了一包
if(m_nCurSendBlock<m_nCurMaxBlock)
{
char s[10];
itoa(m_nCurSendBlock,s,10);
MessageBox(s);
m_nCurSendBlock++;
}
else
{
m_nSendFileState=0;
m_nCurSendBlock=0;
m_nCurMaxBlock=0;
return;
}
FullSendBuffer(m_nCurSendBlock);//发送第二包
}

}


现在设断点在OnSendOver内部时,不能跟踪到m_nCurSendBlock的变化(可能程序运行不到这~),我该怎么解决呢?


[解决办法]
断点设到if(m_nSendFileState==1)
看看程序流程到底怎么走了。
[解决办法]
看上面的看不出来什么,看看程序怎么走的,多打点日志看看
[解决办法]
消息响应函数没执行吧?
看看消息响应是否正确....

读书人网 >VC/MFC

热点推荐