|
通过支持AT指令集的手机发送短消息(源代码)(17) Sleep( 1200 ); CloseHandle( m_hSystemExit ); CloseHandle( m_Overlapped.hEvent ); CloseHandle( m_hIDComDev ); DeleteCriticalSection( &m_csComm ); FreeSubmitPool(); FreeDeliverPool(); FreeShortMsgPool(); return( true ); } long CGSMPhone::Send(char *pNo, char *pMsg, BOOL bReport, BOOL bHandFree, BOOL bAsyn) { if( IsOpened() == false ) return( -4 ); if( pNo == NULL ) return( -5 ); if( pMsg == NULL ) return( -5 ); if( m_strSMCenter.IsEmpty() ) return( -1 ); char szSendBuf[1024] = {0}; char szTemp[20] = {0}; char* pReceiveData = NULL; int len = 0; sprintf( szSendBuf, "AT+CMGS=60\r\n" ); Submit( szSendBuf, strlen(szSendBuf) ); memset( szSendBuf, 0, 1024 ); DWORD dwRet = Deliver( pReceiveData ); if( dwRet == 0 strstr( pReceiveData, ">" ) == NULL ) { return( -5 ); } delete [] pReceiveData; pReceiveData = NULL; char* p = NumberEncode( (char*)(LPCTSTR)m_strSMCenter ); // sprintf( szTemp, "%.2X", strlen( p ) ); memcpy( szSendBuf+len, "0891", 4 );// 91代表国际、ISDN/电话号码,没有必要选取其他的值 len += 4; if( strncmp( p, "68", 2 ) != 0 ) { if( strlen( p ) != 12 ) return( -5 ); memcpy( szSendBuf+len, "68", 2 ); len += 2; } else { if( strlen( p ) != 14 ) return( -5 ); } memcpy( szSendBuf+len, p, strlen( p ) ); len += strlen( p ); delete [] p; memcpy( szSendBuf+len, "1100", 4 );// 文件头字节,具体有很多设置,没有特别必要选取其他值 len += 4; sprintf( szTemp, "%.2X", strlen( pNo ) ); memcpy( szSendBuf+len, szTemp, 2 ); len += 2; memcpy( szSendBuf+len, "81", 2 );// 未知、ISDN/电话号码,没有必要选取其他值 len += 2; p = NumberEncode( pNo );
|