代码共享:操作手机Modem收发短信基础类

Posted on 2006-03-08 10:03  软件成就我  阅读(578)  评论(0)    收藏  举报

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO ;
using System.Management;
using System.Runtime .InteropServices ;
using System.Text ;
using Microsoft.Win32;
using MSCommLib;

//**************************************************************************
//**     Create By:
//**     Create Date:
//**     Description: 负责手机短信设备初始化,收发手机短信。
//**     Modify List:
//**
//**************************************************************************
namespace MobileMessageManager
{
 /// <summary>
 /// MobileSMS 的摘要说明。
 /// </summary>
 public class MobileSMS
 {
  private MSCommLib.MSCommClass msCom=new MSCommLib.MSCommClass();
  private string mstrMessage="";//保存接收到的短信
  private string mstrBufferRead="";//保存从缓冲区读出的字符
  private int mintComPort=1;
  private string mstrCenterNo="";
  private int miDelayTime=6;//连续发送的间隔时间
  private string mstrSetting="9600,N,8,1";
  private bool mblnRegister=true;//是否注册
  private string strNowMessage;
  /// <summary>
  ///
  /// </summary>
  public MobileSMS()
  {
  }
  /// <summary>
  /// 延迟发送时间
  /// </summary>
  public int DelayTime
  {
   set
   {
    miDelayTime=value;
   }
   get
   {
    return miDelayTime;
   }
  }

  /// <summary>
  /// 设备配置
  /// </summary>
  public string Settings
  {
   set
   {
    mstrSetting=value;
   }
   get
   {
    return mstrSetting;
   }
  }

  /// <summary>
  /// 收到的短信
  /// </summary>
  public string ReceiveMessage
  {
   get
   {
    return mstrMessage;
   }
  }

  /// <summary>
  /// 初始化端口
  /// </summary>
  /// <param name="iComPort">端口号</param>
  /// <param name="strCenterNo">短信中心号码</param>
  /// <returns>返回整形</returns>
  public int InitSms(int iComPort,string strCenterNo)
  {
   mintComPort=iComPort;
   mstrCenterNo=strCenterNo;
   if(mstrCenterNo.Substring (0,2)!="86")
   {
    mstrCenterNo="86"+mstrCenterNo;
   }
   try
   {
    WaitMonment(2);
    msCom.CommPort =short.Parse ( mintComPort.ToString ());
    msCom.Settings  = mstrSetting;

    msCom.InputMode =MSCommLib.InputModeConstants.comInputModeText ;
    msCom.InputLen =0;
    msCom.InBufferSize =1024;
    msCom.InBufferCount =0;
    msCom.OutBufferCount =0;
    msCom.RTSEnable =true;
    msCom.PortOpen =true ;
  
    msCom.Output ="AT+CMGF=0" + System.Convert .ToChar (13).ToString ()+System.Convert .ToChar (10).ToString ();
    bool blnFlag=WaitMonment(5);
    if(blnFlag==true)
    {
     mblnRegister=true;
     return 0;
    }
    else
    {
     return -2;
    }
   }
   catch(Exception tt)
   {
    if(tt.Message .IndexOf ("0x800A1F45")>=0)
    {
     //端口已打开
     return 1;
    }
   
    if(tt.Message .IndexOf ("0x800A1F42")>=0)
    {
     //端口错误
     return -1;
    }
    else
    {
     return -3;
    }
   }
  }

  /// <summary>
  /// 将中心号码编码
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string GetCenterNo(string strValue)
  {
   string strCenterNo=strValue;
   string strTemp="";
   if(strValue=="")
   {
    return "";
   }
   if(strValue.Substring (0,1)=="+")
   {
    strCenterNo=strCenterNo.Substring (1,strCenterNo.Length -1);
   }
   if(System.Math .IEEERemainder(double.Parse (strCenterNo.Length.ToString () ),2)!=0)
   {
    strCenterNo=strCenterNo+"F";
   }
   for(int i=0;i<strCenterNo.Length;i=i+2)
   {
    strTemp=strTemp+strCenterNo.Substring (i+1,1)+strCenterNo.Substring (i,1);
   }
   strCenterNo="0891"+strTemp;
   return strCenterNo;
  }

  /// <summary>
  /// 将电话号码编码
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string GetPhoneNo3(string strValue)
  {
   string strTemp="";
   if(strValue=="")
   {
    return "";
   }
   int iop=strValue.Trim().Length;
   if(strValue.Substring (0,1)=="+")
   {
    strValue=strValue.Substring (1,strValue.Length -1);
   }
   //if(System.Math .IEEERemainder(double.Parse (strPhoneNo.Length.ToString () ),2)!=0)
   //{
   strValue=strValue+"F";
   //}
   for(int i=0;i<strValue.Length;i=i+2)
   {
    strTemp=strTemp+strValue.Substring (i+1,1)+strValue.Substring (i,1);
   }
   return strTemp;
  }

  /// <summary>
  /// 将电话号码编码
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string GetPhoneNo(string strValue)
  {
   string strPhoneNo=strValue;
   string strTemp="";
   string strTempMsg="";
   strTempMsg=strNowMessage ;
   strNowMessage =strPhoneNo;
   if(strValue=="")
   {
    return "";
   }
   if(strNowMessage.Substring (0,1)=="+")
   {
    strNowMessage=strPhoneNo.Substring (1,strPhoneNo.Length -1);
   }
  
   if(System.Math .IEEERemainder(double.Parse (strNowMessage.Length.ToString () ),2)!=0)
   {
    strNowMessage=strNowMessage+"F";
   }

   for(int i=0;i<strNowMessage.Length;i=i+2)
   {
    strTemp=strTemp+strNowMessage.Substring (i+1,1)+strNowMessage.Substring (i,1);
   }
   strNowMessage=strTemp;
   strPhoneNo=strNowMessage ;
   strNowMessage =strTempMsg;
   return strPhoneNo;
  }

  /// <summary>
  /// 奇偶换位
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string ChangePosition(string strValue)
  {
   string strPhoneNo=strValue;
   string strTemp="";
   if(strValue=="")
   {
    return "";
   }
   for(int i=0;i<strPhoneNo.Length;i=i+2)
   {
    strTemp=strTemp+strPhoneNo.Substring (i+1,1)+strPhoneNo.Substring (i,1);
   }
   strPhoneNo=strTemp;
   return strPhoneNo;
  }

  /// <summary>
  /// 将短信内容编码
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string GetMessage(string strValue)
  {
   string strTemp="";
   Byte[] bt=new Byte [1024];
   string strValue1=strValue;
   System.Text .Encoding .Unicode .GetBytes (strValue1,0,strValue1.Length ,bt,0);
   for(int i=0;i<bt.Length ;i=i+2)
   {
    if(bt[i]==0 && bt[i+1]==0)
    {
     i=bt.Length ;
    }
    else
    {
     strTemp=strTemp+bt[i+1].ToString ("X2")+bt[i].ToString ("X2");
    }
   }
   int iLen=strValue.Length *2;
   return iLen.ToString ("X2")+ strTemp;
  }
 
  /// <summary>
  /// 将要发送的信息组合
  /// </summary>
  /// <param name="strPhoneNo"></param>
  /// <param name="strMessage"></param>
  /// <returns></returns>
  private string GetSendMsg(string strPhoneNo,string strMessage)
  {
   string strCenterNo=mstrCenterNo;
   int i=strMessage.Length *2+15;
   strNowMessage ="";
   strNowMessage=i.ToString ()+System.Convert .ToChar (13).ToString ();

   //信息中心号码
   strNowMessage=strNowMessage+GetCenterNo(strCenterNo);
   //手机号码
   strNowMessage=strNowMessage+ "11000D91" +GetPhoneNo(strPhoneNo)+"000800";
   //短信内容
   string strTemp=GetMessage(strMessage);
   strNowMessage=strNowMessage+strTemp;
   strNowMessage=strNowMessage+System.Convert .ToChar (26).ToString ()+System.Convert .ToChar (13).ToString ()+System.Convert .ToChar (10).ToString ();
   return strNowMessage;
  }

  /// <summary>
  /// 发送短信
  /// </summary>
  /// <param name="strPhoneNo"></param>
  /// <param name="strMessage"></param>
  /// <returns></returns>
  public int SendMessage(string strPhoneNo,string strMessage)
  {
   if(mblnRegister==false)
   {
    return -6;
   }
   //判断是否是中文
   bool blnChs=IsChs(strMessage);
   if(blnChs==true)
   {
    if(strMessage.Length >70)
    {
     return -5;
    }
    return SendMessageChs(strPhoneNo,strMessage);
   }
   else
   {
    if(strMessage.Length >160)
    {
     return -5;
    }
    return SendMessageEn(strPhoneNo,strMessage);
   }
  }

  /// <summary>
  /// 返回TRUE是中文,否则纯英文
  /// </summary>
  /// <param name="strMessage"></param>
  /// <returns></returns>
  private bool IsChs(string strMessage)
  {
   byte [] bt=new Byte [1024];
   System.Text.Encoding .Unicode .GetBytes (strMessage,0,strMessage.Length ,bt,0);
   for(int i=0;i<bt.Length ;i=i+2)
   {
    if(bt[i+1]!=0)
    {
     return true;
    }
   }
   return false;
  }
 
  /// <summary>
  /// 发送纯英文短信息
  /// </summary>
  /// <param name="strPhoneNo"></param>
  /// <param name="strMessage"></param>
  /// <returns></returns>
  private int SendMessageEn(string strPhoneNo,string strMessage)
  {
   try
   {
    string strMsg="";
    DateTime dtOld=System.DateTime .Now ;
    TimeSpan dtInter;
    msCom.Output ="AT"+System.Convert .ToChar (13).ToString ();
    //WaitMonment(1);
    strMsg="AT+CSCA=" + "+"+ mstrCenterNo +System.Convert .ToChar (13).ToString ()+System.Convert .ToChar (10).ToString ();
    msCom.Output =strMsg;
    //WaitMonment(1);
    msCom.Output ="AT+CMGF=1" + System.Convert .ToChar (13).ToString ();
    //WaitMonment(1);
    string strTemp=strNowMessage ;
    strNowMessage =strPhoneNo;
    strPhoneNo=strNowMessage ;
    msCom.Output ="AT+CMGS="+ strPhoneNo+System.Convert .ToChar (13).ToString ();
    int iLen=strPhoneNo.Length ;
    iLen=strPhoneNo.Length ;
    msCom.Output= strMessage+System.Convert .ToChar (26).ToString ()+System.Convert .ToChar (13).ToString ()+System.Convert .ToChar (10).ToString ();
    bool blnFlag=WaitMonment(1);
    //延迟时间
    DateTime dtNow=System.DateTime .Now ;
    DateTime dtOld1=System.DateTime .Now ;
    dtInter=dtNow-dtOld1;
    while(dtInter.TotalSeconds <miDelayTime)
    {
     dtNow=System.DateTime .Now ;
     dtInter=dtNow-dtOld1;
    }
    if(blnFlag==true)
    {
     return 0;
    }
    else
    {
     //发送失败
     return -1;
    }
   }
   catch(Exception tt)
   {
    if(tt.Message .IndexOf ("0x800A1F52")>=0)
    {
     //端口未初始化
     return -2;
    }
    else
    {
     return -3;
    }
   }
  }

  /// <summary>
  /// 发送中文短信息
  /// </summary>
  /// <param name="strPhoneNo"></param>
  /// <param name="strMessage"></param>
  /// <returns></returns>
  private int SendMessageChs(string strPhoneNo,string strMessage)
  {
   try
   {
    string strMsg="";
    DateTime dtOld=System.DateTime .Now ;
    TimeSpan dtInter;
    strMsg=GetSendMsg("86"+strPhoneNo ,strMessage );
    msCom.Output ="AT+CMGF=0" + System.Convert .ToChar (13).ToString ()+System.Convert .ToChar (10).ToString () ;
    WaitMonment(5);
    msCom.Output ="AT+CMGS=" + strMsg;
    bool blnFlag=WaitMonment(5);
    //延迟时间
    DateTime dtNow=System.DateTime .Now ;
    DateTime dtOld1=System.DateTime .Now ;
    dtInter=dtNow-dtOld1;
    while(dtInter.TotalSeconds <miDelayTime)
    {
     dtNow=System.DateTime .Now ;
     dtInter=dtNow-dtOld1;
    }
    if(blnFlag==true)
    {
     return 0;
    }
    else
    {
     //发送失败
     return -1;
    }
   }
   catch(Exception tt)
   {
    if(tt.Message .IndexOf ("0x800A1F52")>=0)
    {
     //端口未初始化
     return -2;
    }
    else
    {
     return -3;
    }
   }
  }

  /// <summary>
  /// 取得未读信息
  /// </summary>
  /// <returns></returns>
  public int ReceUnReadMsg()
  {
   if(mblnRegister==false)
   {
    return -6;
   }
   string strMsg="";
   try
   {
    //msCom.OutBufferSize =0;
    //msCom.Output ="AT+CMGL=0"+System.Convert .ToChar (13).ToString ();
    msCom.Output ="AT+CMGL=4"+System.Convert .ToChar (13).ToString ();
    bool blnFlag=WaitMonment(5);
   
    if(blnFlag==false)
    {
     return -1;
    }
    strMsg=mstrBufferRead;
   }
   catch(Exception tt)
   {
    if(tt.Message .IndexOf ("0x800A1F52")>=0)
    {
     //端口未初始化
     return -2;
    }
    else
    {
     return -3;
    }
   }
   string[] str=strMsg.Split ('\n');
   strMsg="";
   string strDelete="";
   strNowMessage ="";
   try
   {
    for(int i=0 ;i<str.Length ;i++)
    {
     if(str[i].Trim () !="")
     {
      if(str[i].Substring (0,1)!="+" && str[i].Substring (0,1)!="O" && str[i].Substring (0,1)!=" " && str[i].Substring (0,1)!="A")
      {
       string strTemp=UnMessage(str[i]);
      
       strNowMessage =strNowMessage + strTemp;
      }
      else
      {
       if(str[i].Substring (0,1)=="+")
       {
        int iMo=-1;
        iMo=str[i].IndexOf (":");
        int iEnd=-1;
        iEnd=str[i].IndexOf (",");
        string strTemp3=str[i].Substring (iMo+1,iEnd-iMo-1);
        strTemp3=strTemp3.Trim ();
        strDelete=strDelete+","+strTemp3;
       }
      }
     }
    }
    mstrMessage=strNowMessage ;
   }
   catch
   {
    return -4;
   }
   //删除已接收信息
   if(strDelete!="")
   {
    strDelete=strDelete.Substring (1,strDelete.Length -1);
    string[] strD=strDelete.Split (',');
    for(int k=0;k<strD.Length ;k++)
    {
     try
     {
      int iDel=Int32.Parse (strD[k]);
      msCom.Output ="AT+CMGD=" + iDel.ToString () +System.Convert .ToChar (13).ToString ();
      WaitMonment(2);
      int i=msCom.InBufferCount ;
      while(i>0)
      {
       string strTemp= (string)msCom.Input ;
       //strMsg =strMsg+" "+System.Text .Encoding .ASCII .GetString (bt,0,bt.Length );
       strMsg =strMsg+strTemp;
       i=msCom.InBufferCount ;
      }
     }
     catch
     {
     }
    }
   }

   strNowMessage ="";
   return 0;
  }

  /// <summary>
  /// 关闭设备端口
  /// </summary>
  public void CloseSms()
  {
   try
   {
    msCom.PortOpen =false;
   }
   catch(Exception tt)
   {
    throw(tt);
   }

  }

  /// <summary>
  /// 取得第几条信息
  /// </summary>
  /// <param name="iIndex"></param>
  /// <returns></returns>
  public int ReceMsgOne(int iIndex)
  {
   if(mblnRegister==false)
   {
    return -6;
   }
   string strMsg="";
   string strDelete="";
   try
   {
    //msCom.OutBufferSize =0;
    msCom.Output ="AT+CMGR=" +iIndex.ToString ()+System.Convert .ToChar (13).ToString ();
    bool blnFlag=WaitMonment(5);
    if(blnFlag==false)
    {
     return -1;
    }
    strMsg=mstrBufferRead;
   }
   catch(Exception tt)
   {
    if(tt.Message .IndexOf ("0x800A1F52")>=0)
    {
     //端口未初始化
     return -2;
    }
    else
    {
     return -3;
    }
   }
  
   string[] str=strMsg.Split ('\n');
   strMsg="";
   try
   {
    for(int i=0 ;i<str.Length ;i++)
    {
     if(str[i].Trim () !="")
     {
      if(str[i].Substring (0,1)!="+" && str[i].Substring (0,1)!="O" && str[i].Substring (0,1)!=" " && str[i].Substring (0,1)!="A")
      {
       string strTemp=UnMessage(str[i]);
       strNowMessage =strNowMessage +strTemp;
      }
      else
      {
       if(str[i].Substring (0,1)=="+")
       {
        int iMo=-1;
        iMo=str[i].IndexOf (":");
        int iEnd=-1;
        iEnd=str[i].IndexOf (",");
        string strTemp3=str[i].Substring (iMo+1,iEnd-iMo-1);
        strTemp3=strTemp3.Trim ();
        strDelete=strDelete+","+strTemp3;
       }
      }
     }
    }
    mstrMessage=strNowMessage ;
   }
   catch
   {
    return -4;
   }
   //删除已接收信息
   if(strDelete!="")
   {
    strDelete=strDelete.Substring (1,strDelete.Length -1);
    string[] strD=strDelete.Split (',');
    for(int k=0;k<strD.Length ;k++)
    {
     try
     {
      int iDel=Int32.Parse (strD[k]);
      msCom.Output ="AT+CMGD=" + iDel.ToString () +System.Convert .ToChar (13).ToString ();
      WaitMonment(2);
      int i=msCom.InBufferCount ;
      while(i>0)
      {
       string strTemp= (string)msCom.Input ;
       //strMsg =strMsg+" "+System.Text .Encoding .ASCII .GetString (bt,0,bt.Length );
       strMsg =strMsg+strTemp;
       i=msCom.InBufferCount ;
      }
     }
     catch(Exception tt)
     {
      throw(tt);
     }
    }
   }
   return 1;
  }

  /// <summary>
  /// 将收到的信息解码
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string UnMessage(string strValue)
  {
   string strTemp="";
   string strMsg="";
  
   int iStart=0;
   int iTemp=0;
   if(strValue=="") return"";
   //取信息中心号码
   iTemp=Int32.Parse (strValue.Substring (iStart,2));
   iStart=iStart+2;
   strTemp=strValue.Substring (iStart,iTemp*2);
   iStart=iStart+iTemp*2+2;
   strTemp=ChangePosition(strTemp);
   //strMsg=strMsg+" "+strTemp;
   //对方号码
   strTemp=strValue.Substring (iStart,2);
   iTemp=Int32.Parse (strTemp,System.Globalization .NumberStyles .HexNumber );
   iStart=iStart+4;
   double dblMod=System.Math .IEEERemainder(double.Parse (iTemp.ToString () ),2);
   if(dblMod!=0)
   {
    iTemp=iTemp+1;
   }
   strTemp=strValue.Substring (iStart,iTemp);
   iStart=iStart+iTemp+2;
   strTemp=ChangePosition(strTemp);
   strTemp=strTemp.Substring (2,strTemp.Length -2);
   if(strTemp.Substring (strTemp.Length -1,1)=="F")
   {
    strTemp=strTemp.Substring (0,strTemp.Length -1);
   }
   strMsg="A"+strTemp.Length.ToString("000")+strTemp;
   string strTDC=strValue.Substring (iStart,2);
   iStart=iStart+2;
   //发送时间
   strTemp=strValue.Substring (iStart,12);
   iStart=iStart+14;
   strTemp=ChangePosition(strTemp);
   strTemp="20"+strTemp.Substring (0,2)+ "-"+strTemp.Substring (2,2)+"-"+strTemp.Substring (4,2)+ " "+
    strTemp.Substring (6,2)+":"+strTemp.Substring (8,2)+":"+strTemp.Substring (10,2);
   strMsg=strMsg+"B"+strTemp.Length.ToString("000")+strTemp;
   //接收内容
   strTemp=strValue.Substring (iStart,2);
   iTemp=Int32.Parse( strTemp,System.Globalization.NumberStyles.HexNumber);
   iStart=iStart+2;
   iTemp=iTemp*2;
   if(iStart+iTemp>strValue.Length )
   {
    iTemp=strValue.Length-iStart;
    int iii=(int)System.Math .IEEERemainder (iTemp,2);
    if(iii!=0)
    {
     iTemp=iTemp-1;
    }
   }
   strTemp=strValue.Substring (iStart,iTemp );
   //信息编码方式00为文本,08为中文
   if(strTDC=="08")
   {
    byte[] bt=new Byte [strTemp.Length/2];
    for(int i=0;i<strTemp.Length ;i=i+2)
    {
     iTemp=Int32.Parse (strTemp.Substring (i,2),System.Globalization .NumberStyles .HexNumber );
     bt[i/2]=Byte.Parse (iTemp.ToString ());
    }
    for(int k=0;k<strTemp.Length /2;k=k+2)
    {
     byte bTemp=new byte();
     bTemp=bt[k];
     bt[k]=bt[k+1];
     bt[k+1]=bTemp;
    }
    strTemp=System.Text .Encoding .GetEncoding (1200).GetString (bt,0,bt.Length );
   }
   if(strTDC=="00")
   {
    strTemp=HexToAscii(strTemp);
   }
   strMsg=strMsg+"C"+strTemp.Length.ToString("000")+strTemp;
   return strMsg;
  }

  /// <summary>
  /// 将收到的编码方式为文本的信息解码
  /// </summary>
  /// <param name="strValue"></param>
  /// <returns></returns>
  private string HexToAscii(string strValue)
  {
   int [] iArr=new int [strValue.Length /2];
   string [] strArr=new string [strValue.Length /2];
   //转换成二进制
   for(int i=0;i<strValue.Length ;i=i+2)
   {
    string strTemp1=strValue.Substring (i,2);
    iArr[i/2]=Int32.Parse (strTemp1,System.Globalization .NumberStyles .HexNumber );
   }
   for(int k=0;k<iArr.Length ;k++)
   {
    strArr[k]=System.Convert.ToString (iArr[k],2).PadLeft (8,'0');
   }
   //==============================================
   //移位规则:以七个八位为单位,分离成八个七位;第一个八位的头一位移到第二八位的末尾,第二个八位的头二位移到第三八位的末尾,依此类推
   int iLen=0;
   if(System.Math.IEEERemainder (strArr.Length ,7)==0)
   {
    iLen=strArr.Length /7;
   }
   else
   {
    iLen=strArr.Length /7+1;
   }
   string strDest="";
  
   for(int j=0;j<iLen;j++)
   {
    for(int jj=0;jj<7;jj++)
    {
     if(j*7+jj<strArr.Length-1)
     {
      strDest=strDest+strArr[j*7+jj].Substring (jj+1,7);
      if(jj<6)
      {
       strArr[j*7+jj+1]=strArr[j*7+jj+1]+strArr[j*7+jj].Substring (0,jj+1);
      }
      else
      {
       strDest=strDest+strArr[j*7+jj].Substring (0,jj+1);
      }
     }
     else
     {
      if(j*7+jj==strArr.Length -1)
      {
       strDest=strDest+strArr[j*7+jj].Substring (jj+1,7);
       strDest=strDest+strArr[j*7+jj].Substring (0,jj+1);
      }
     }
    }
   }
   //===========================================================
   //二进制转成十进制
   if(System.Math.IEEERemainder (strDest.Length ,7)==0)
   {
    iLen=strDest.Length /7;
   }
   else
   {
    iLen=strDest.Length /7+1;
   }
  
   byte[] bt=new byte [iLen];
   string strBin="";
   for(int m=0;m<iLen;m++)
   {
    if(m<iLen-1)
    {
     strBin=strDest.Substring (m*7,7);
    }
    else
    {
     strBin=strDest.Substring (m*7,strDest.Length-m*7);
    }
    strBin=System.Convert.ToInt32(strBin,2).ToString();
    bt[m]=Byte.Parse (strBin);
   }
   //转换成ANSI字符
   //计算要转换的长度
   int iLenMsg=0;
   for(int n=0;n<bt.Length;n++)
   {
    if(bt[n]!=0)
    {
     iLenMsg++;
    }
    else
    {
     n=bt.Length;
    }
   }
   return System.Text.Encoding .ASCII .GetString (bt,0,iLenMsg ) ;
  }

  /// <summary>
  /// 延迟时间
  /// </summary>
  /// <param name="iSecond"></param>
  /// <returns></returns>
  private bool WaitMonment(int iSecond)
  {
   DateTime dtOld=System.DateTime .Now ;
   DateTime dtNow=System.DateTime .Now ;
   TimeSpan dtInter;
   dtInter=dtNow-dtOld;
   mstrBufferRead="";
   string strTemp="";
   int i=msCom.InBufferCount ;
   if (i>0)
   {
    strTemp=(string)msCom.Input ;
    if(strTemp.ToLower ().IndexOf ("ok")<0)
    {
     i=0;
    }
    else
    {
     mstrBufferRead=strTemp;
     return true;
    }
   }
   while(dtInter.TotalSeconds <iSecond && i<=0 )
   {
    dtNow=System.DateTime .Now ;
    dtInter=dtNow-dtOld;
    i=msCom.InBufferCount ;
    if (i>0)
    {
     strTemp=strTemp+(string)msCom.Input ;
     if(strTemp.ToLower ().IndexOf ("ok")<0)
     {
      i=0;
     }
     else
     {
      mstrBufferRead=strTemp;
      return true;
     }
    }
   }
   mstrBufferRead=strTemp;
   return false;
  }
 }
}

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3