我的思路:
发送方先设了标志位5,再发送第一行.
接收方满足标志位5的条件,才接收,接着接收方发送标志位6   
发送方收到标志位6后,设了标志位5,才发送第二行。
重复上述步骤,直至内容发送完。结果程序,死在:上面的第三行中的:接着接收方发送标志位6 程序:void CPc_pcDlg::OnOK() //发送按钮
{   
file1.Open(strDirFile,CFile::modeReadWrite|CFile::shareExclusive);
    file1.SeekToBegin();
    m_strSend="";
    szLine="";
    GetDlgItem(IDC_send)->SetWindowText( m_strSend);

    Status=0;
   Array1.RemoveAll();
Array1.SetSize(1);
Array1.SetAt(0,05);
   if( file1.ReadString(szLine) )
{
    m_strSend+= szLine;
    m_strSend+="\r\n" ;
    UpdateData(false);
    m_ctrlComm.SetOutput(COleVariant(m_strSend));//发送数据
   }
   else file1.Close();  
 
}
void CPc_pcDlg::OnOnCommMscomm1() 
{
    VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2)
{

switch(Status)

 case 0://接收方处理数据

{
              if(Array1[0]==5)
  {

             variant_inp=m_ctrlComm.GetInput(); //读缓冲区
                     safearray_inp=variant_inp;  //VARIANT型变量转换为ColeSafeArray型变量
                      len=safearray_inp.GetOneDimSize(); //得到有效数据长度
                     for(k=0;k<len;k++)
                      safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
                      for(k=0;k<len;k++)             //将数组转换为Cstring型变量
 {
                     BYTE bt=*(char*)(rxdata+k);    //字符型
                                strtemp.Format("%c",bt);    //将字符送入临时变量strtem
                         m_strReceive+=strtemp;  //加入接收编辑框对应字符串
                             //UpdateData(FALSE);  //更新编辑框内容
 }  
 
                               if(m_strSend==m_strReceive)

                    m_strReceive+="\r\n" ;
                       GetDlgItem(IDC_receive)->SetWindowText(m_strReceive);
}
                         else
                        UpdateData(FALSE);  //更新编辑框内容
 Status=1;
                                 Array1.RemoveAll();
                             Array1.SetSize(1);
                             Array1.SetAt(0,06);
 m_ctrlComm.SetOutput(COleVariant(Array1));
  }
 else
 {
                           Status=1;
                           Array1.RemoveAll();
                       Array1.SetSize(1);
                       Array1.SetAt(0,06);
   m_ctrlComm.SetOutput(COleVariant(Array1));
 }

  
                
             }
              break;     case 1://发送方处理数据
{

  if(Array1[0]==6)
  {                 
         Status=0;
                     Array1.RemoveAll();
                 Array1.SetSize(1);
                 Array1.SetAt(0,05);
                     if( file1.ReadString(szLine) )
 {
                      m_strSend+= szLine;
                      m_strSend+="\r\n" ;
                      UpdateData(FALSE);  //更新编辑框内容
                       //GetDlgItem(IDC_send)->SetWindowText(m_strSend);
                  record=file1.GetPosition();//记录上次的结果(读到哪了)
                      m_ctrlComm.SetOutput(COleVariant(m_strSend));
 }
                     else file1.Close();
  }
  else
  {
                      file1.Seek(record,0);//接着上回读
                        if( file1.ReadString(szLine) )
{
                     m_strSend+= szLine;
                    m_strSend+="\r\n" ;
                     //GetDlgItem(IDC_send)->SetWindowText(m_strSend);
        UpdateData(FALSE);  //更新编辑框内容
                    record=file1.GetPosition();//记录上次的结果(读到哪了)
                m_ctrlComm.SetOutput(COleVariant(m_strSend));

}
                       else file1.Close();
  }

 
}
break;     
}
       


 
 
}
}

解决方案 »

  1.   

    通过调试好像是死在接收方发给发送方,求指点
      

  2.   

        按你说的,你应该发标志位,再发数据,现在是你没发标志位,可程序里却先判断标志位再决定是否发送数据或接收数据,所以你现在好象是处于死机状态,因为接收方根据没接到标志位,所以就不发数据
        这是个协议的事,和收发无关,把上下位机的通信协议定好,双方按协议来做就行了
      

  3.   

    程序太长,懒得读了,应该是流程不对,进入死循环了,单步调试就能看出来了。
      

  4.   

    程序太长,懒得读了,应该是流程不对,进入死循环了,单步调试就能看出来了。
      

  5.   

    你单步调试或通过输出日志的方式具体定位一下问题
    乍看上去没有什么能够导致死循环的位置啊
      

  6.   

    我单步调试就是出不来,才问,没办法,就给老师看,他帮我改,之后就好了,但是你们的答案,不是我要的,故没分