写一下这2天的彩信收发心的,有自己的部分,也有部分代码用的别人的。
发彩信可以调用系统提供的接口,也可以自己通过socket http连接彩信网关2种方法来发送彩信。方法1 利用socket彩信发送:格式大概为 http包头+mm1,xml的彩信数据#include "ril.h"#pragma comment(lib,"ril.lib") //自己下载intget_mms_packet(char* mms_context, char* context, int context_len, char* mobile_id){char szToCombin[50];char*  pSubject = "MmsTest";int iDataTextLen;char *szXmlFileName = "my.txt";char *id = "9604059";//X-Mms-Message-Type(0x8c): m-send-req(0x80)unsigned char* pCurPos = mms_context;*pCurPos = 0x8c; pCurPos++;*pCurPos = 0x80; pCurPos++;//ID*pCurPos = 0x98; pCurPos++;strcpy( (char*)pCurPos, id );pCurPos += strlen( mobile_id);*pCurPos = 0x00; pCurPos++;//X-Mms-MMS-Version(0x8d):v1.0(0x90)*pCurPos = 0x8d; pCurPos++;*pCurPos = 0x90; pCurPos++;//from*pCurPos = 0x89; pCurPos++;*pCurPos = 0x01; pCurPos++;*pCurPos = 0x81; pCurPos++;//To(0x97)memset(szToCombin, '\0', sizeof(szToCombin));sprintf( szToCombin, "%s%s%s", "+86", mobile_id, "/TYPE=PLMN" );*pCurPos = 0x97; pCurPos++;strcpy( (char*)pCurPos, szToCombin);pCurPos += strlen(szToCombin);*pCurPos = 0x00; pCurPos++;//subject*pCurPos = 0x96; pCurPos++;strcpy( (char*)pCurPos, pSubject );pCurPos += strlen(pSubject);*pCurPos = 0x00; pCurPos++;//Content-Type: application/vnd.wap.multipart.mixed*pCurPos = 0x84; pCurPos++;*pCurPos = 0xa3; pCurPos++;jpeg头*pCurPos = 0xa1; pCurPos++;*pCurPos = 0x9e; pCurPos++;*pCurPos = 0xff; pCurPos++;*pCurPos = 0xd8; pCurPos++;//模拟的jpeg数据*pCurPos = 0x11; pCurPos++;*pCurPos = 0x22; pCurPos++;*pCurPos = 0xff; pCurPos++;*pCurPos = 0xd9; pCurPos++;//彩信包实际长度return (pCurPos - mms_context);}intmms_send(char* mobile_num, char* context, int context_len, char* temp){int mobile_type = 1; //default china mobilechar senddata[1024*3];int rtn;char recedata[1024*2];char mms_context[1024*2];int mms_context_len;int send_len;char* pos = 0x0;mms_context_len = get_mms_packet(mms_context, context, context_len, mobile_num);memset(&server_addr, 0, sizeof(ST_SOCKADDR_T));server_addr.sa = malloc(sizeof(struct sockaddr_in));((struct sockaddr_in*)(server_addr.sa))->sin_family=AF_INET;((struct sockaddr_in*)(server_addr.sa))->sin_addr.s_addr=inet_addr("10.0.0.172"); ((struct sockaddr_in*)(server_addr.sa))->sin_port = htons(80);server_addr.salen = sizeof(struct sockaddr_in);memset(recedata, '\0', sizeof(recedata));memset(senddata, '\0', sizeof(senddata));//mobile_type = cheak_my_mobile();if(st_socket_create(&mms_sock,  SOCK_STREAM, IPPROTO_TCP, 80) != 1){return -1;}rtn = st_socket_connect(mms_sock, server_addr);if(rtn != 1){return rtn;}if(mobile_type == 1) //china mobile{sprintf(senddata, "POST http://mmsc.monternet.com HTTP /1.1\r\nHost: 10.0.0.172:80\r\nAccept-Charset:utf-8\r\nAccept:application/vnd.wap.mms-message,text/plain,*/*\r\nAccept-Language: en\r\nContent-Type: application/vnd.wap.mms-message\r\nContent-Length:%d\r\nUser-Agent: Nokia6235/1.0 (S190V0200.nep) UP.Browser/6.2.3.2 MMP/2.0\r\nx-wap-profile: \"http://nds1.nds.nokia.com/uaprof/N6235r200.xml\"\r\nConnection: Keep-Alive\r\n\r\n", mms_context_len);memcpy(senddata + strlen(senddata), mms_context, mms_context_len);}send_len = strlen(senddata) +1;rtn = st_socket_sendto(mms_sock, &server_addr, 0, senddata, &send_len);if(rtn < 0){return -3;}      rtn = st_socket_recvfrom(mms_sock, 0, (ems_int8*)recedata, sizeof(recedata));if(rtn < 0){return -4;}memcpy(temp, senddata, send_len);pos = strstr(recedata, "200");if(pos == 0){return -5;}return rtn;}利用mms_send就可以把彩信发送出去了。这个理论上可以跨平台运行。st_socket_create等函数是对socket的封装彩信拦截:void CALLBACK RILResultProc(DWORD dwCode, HRESULT hrCmdID, const void* lpData, DWORD cbData, DWORD dwParam){DWORD *dwNum;switch (dwCode){case RIL_RESULT_OK:dwNum = (DWORD*)lpData;break;case RIL_RESULT_NOCARRIER:case RIL_RESULT_NODIALTONE:case RIL_RESULT_ERROR:case RIL_RESULT_BUSY:break;}}void RILNotifyProc(DWORD dwCode, const void* lpData, DWORD cbData, DWORD dwParam){UINT uiCharactersConverted ;//pwsMessage 中存储解码后得到的短信内容WCHAR pwsMessage[MAX_GSM_CHARS_PER_SMS_DATAGRAM+1];  // Extra character is for NULL-terminate the string.if(((dwCode & RIL_NCLASS_ALL)== RIL_NCLASS_MESSAGE) &&(RIL_NOTIFY_MESSAGE==dwCode)){// Prepare to decode the message data (using the appropriate alphabet encoding)RILMESSAGE *prmMsg = (RILMESSAGE *)lpData;switch(prmMsg->dwType){case RIL_MSGTYPE_IN_DELIVER:{char *psRet=NULL;DWORD dwAlphabet = prmMsg->msgInDeliver.rmdDataCoding.dwAlphabet;DWORD dwHeaderLength = prmMsg->msgInDeliver.cbHdrLength;DWORD dwBodyLength = prmMsg->msgInDeliver.cchMsgLength;if(dwBodyLength <= 0){break;}uiCharactersConverted = 0;//最后得到的字符数(不包含\0)ASSERT(pwsMessage);if (NULL == pwsMessage){break;}                           MultiByteToWideChar(CP_ACP,0, prmMsg->msgInDeliver.rgbMsg,-1,strW,1024);MessageBox(NULL, strW, _T("SMS content:"), MB_OK);get_mms(prmMsg->msgInDeliver.rgbMsg); //开始接收彩信break;}case RIL_MSGTYPE_IN_IS637DELIVER:  //CDMA{break;}                }}return;}BOOL RegisterRIL(){HRIL g_hRil;HRESULT hResult = RIL_Initialize(1, RILResultProc, RILNotifyProc, RIL_NCLASS_MESSAGE, (DWORD) NULL, &g_hRil);if(FAILED(hResult)){MessageBox(NULL, TEXT("Initialize failed!"),_T("Tips"), MB_OK);}return TRUE;}intmms_recv(char* mobile_num, char* context, int* context_len){RegisterRIL(); }intget_mms(char* p_url ) //接收彩信,例如 http://10.0.0.172/#dfd3*dc{int recv_data[1024*10];int send_len;int rtn;char *pos = 0x0;char get_string[MAX_PATH] = "";   //pUrlMbyte 就是上一步获取到的url彩信地址sprintf( get_string, "GET %s HTTP/1.1\r\n\r\n", p_url );if(st_socket_create(&mms_sock,  SOCK_STREAM, IPPROTO_TCP, 80) != 1){return -1;}if(st_socket_connect(mms_sock, server_addr) != 1){return -1;}send_len = strlen(get_string) +1;rtn = st_socket_sendto(mms_sock, &server_addr, 0, get_string, &send_len);if(rtn < 0){return -1;}      rtn = st_socket_recvfrom(mms_sock, 0, (ems_int8*)recv_data, sizeof(recv_data));  //step 5if(rtn < 0){return -1;}      pos = strstr(recv_data, "200");if(pos == 0x0){return -1;}st_socket_close(&mms_sock);//hander recv_data}系统调用mms_recv即可实现短信拦截。方法2 调用系统接口发送彩信 1 windows mobole and 魅族m8
//--------------------------------------------------------------------------------
}
//--------------------------------------------------------------------------------
//
//
// 2010.4.13
//sylar wuhan
//
//--------------------------------------------------------------------------------
#ifdef MS_WINCE_M8int mms_send(char *subject, char *bodytext, char* attach_path)
{TCHAR commandLine[1024];TCHAR t_subject[128]; TCHAR t_body[512]; TCHAR t_attach_path[256];if(strlen(subject) > 128 || strlen(bodytext) > 512 || strlen(attach_path) > 256){return -1;}memset(commandLine, '\0', sizeof(commandLine));memset(t_subject,     '\0', sizeof(t_subject));memset(t_body,         '\0', sizeof(t_body));memset(t_attach_path, '\0', sizeof(t_attach_path));MultiByteToWideChar(CP_ACP, 0, subject,       -1, t_subject,        sizeof(t_subject)/sizeof(TCHAR));MultiByteToWideChar(CP_ACP, 0, bodytext,     -1, t_body,           sizeof(t_body)/sizeof(TCHAR));MultiByteToWideChar(CP_ACP, 0, attach_path, -1, t_attach_path, sizeof(t_attach_path)/sizeof(TCHAR));
#ifdef UNICODEswprintf(commandLine,  _T("-attach \"%s\""),  t_attach_path);
#elsesprintf(commandLine,  _T("-attach \"%s\""), attach_path);
#endifif(CreateProcess(_T("\\Windows\\SMS.exe"), commandLine, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL) == 0){return -1;}return 1;
}#elif MS_WINCEint
ems_mms_send(char *subject, char *bodytext, char* attach_path)
{TCHAR commandLine[1024];TCHAR t_subject[127]; TCHAR t_body[511]; TCHAR t_attach_path[255]; TCHAR t_mms_name[127];HKEY hKey = 0;char mms_name[127];DWORD dwType = 0;DWORD dwBufSize = sizeof(mms_name);const TCHAR * subkey = L"Software\\Arcsoft\\ArcSoft MMS UA\\Config\\UI";unsigned char temp1, temp2;int i = 0;if(strlen(subject) > 127 || strlen(bodytext) > 511 || strlen(attach_path) > 255){return -1;}memset(mms_name, '\0', sizeof(mms_name));memset(commandLine, '\0', sizeof(commandLine));memset(t_subject,   '\0', sizeof(t_subject));memset(t_body,      '\0', sizeof(t_body));memset(t_attach_path, '\0', sizeof(t_attach_path));if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,0,&hKey) != ERROR_SUCCESS){dwType = REG_SZ;if(RegQueryValueEx(hKey,L"MMSAccountName", 0, &dwType, (BYTE*)mms_name, &dwBufSize) == ERROR_SUCCESS){return -1;}RegCloseKey(hKey);}for(i = 0;  i < dwBufSize; i += 2){mms_name[i] <= 0?(temp1 = ~(-mms_name[i]) + 1):(temp1 = mms_name[i]);mms_name[i + 1] <= 0?(temp2 = ~(-mms_name[i + 1]) + 1):(temp2 = mms_name[i + 1]);
#if BYTE_ORDER_==BIG_EANDIN_t_mms_name[i/2] = temp2<<8 | temp1;
#elset_mms_name[i/2] = temp1<<8 | temp2;
#endif }MultiByteToWideChar(CP_ACP, 0, subject,     -1, t_subject,     sizeof(t_subject)/sizeof(TCHAR));MultiByteToWideChar(CP_ACP, 0, bodytext,    -1, t_body,        sizeof(t_body)/sizeof(TCHAR));MultiByteToWideChar(CP_ACP, 0, attach_path, -1, t_attach_path, sizeof(t_attach_path)/sizeof(TCHAR));swprintf(commandLine,  _T("-service \"%s\"  -body \"%s\" -subject \"%s\" -attach \"%s\""), t_mms_name, t_body, t_subject, t_attach_path);if(CreateProcess(_T("\\Windows\\tmail.exe"), commandLine, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL) == 0){return -1;}return 1;
}
#endif

symbian s60

int Send_MMS(const char* subject, const char* bodytext,const char* attach_path)
{_LIT(KSubject, subject);_LIT(KBodyText, bodytext);_LIT(KAttachPath, attach_path);// create empty messageCSendUi *sendui = CSendUi::NewLC();CMessageData* message = CMessageData::NewLC();CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();CleanupStack::PushL(paraFormatLayer);CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();CleanupStack::PushL(charFormatLayer);CRichText* messageBodyContent = CRichText::NewL(paraFormatLayer,charFormatLayer);CleanupStack::PushL(messageBodyContent);messageBodyContent->InsertL(0, KBodyText);message->SetSubjectL(KSubject());message->SetBodyTextL(messageBodyContent);message->AppendAttachmentL(KAttachPath);// start message editor through SendUIsendui->CreateAndSendMessageL(KSenduiMtmMmsUid, message);CleanupStack::PopAndDestroy(5);return 1;
}
具体原理性的说明可以参阅
http://blog.csdn.net/depraved_survival/archive/2009/03/09/3969013.aspx

转载于:https://www.cnblogs.com/SuperXJ/archive/2010/04/13/1711310.html

windows mobile 和 symbian 平台上彩信(MMS)收发方案相关推荐

  1. 智能手机系统Windows mobile和Symbian的选择

    智能手机系统Windows mobile和Symbian的选择 若说到智能手机,不能不谈到操作系统--   所谓智能手机(Smartphone),是指"像个人电脑一样,具有独立的操作系统,可 ...

  2. Windows Mobile与symbian智能手机系统的比较

    Windows Mobile与symbian智能手机系统的比较 Eddy 智能手机的操作系统主要有两大系统占据大部分手机,就是WindowsMobile(简称WM)和Symbian(简称SB).这里主 ...

  3. windows mobile linux,智能手机器操作系统 Windows Mobile和Symbian及LinLinux详解

    Windows Mobile 微软推出的Windows Mobile操作系统最初被视作是与Palm OS竞争的产品,然而时至今日,Windows Mobile的应用已经超过Palm,开始显露出掌上设备 ...

  4. 摩托罗拉SE4500 德州仪器TI Omap37xx/AM3715/DM3730/AM3530 wince6.0/Windows Mobile 6.5平台 二维软解调试记录及相关解释

    现在安卓大行其道,不是高通,就是MTK,甚至于很多人不知道还有德州仪器这个平台了,关于如何在德州仪器Omap37xx平台上调试SE4500,网络上除了针对SE4500的几个pdf文档介绍之外,没有任何 ...

  5. Windows Mobile使用Web Service上传和下载二进制数据流

    最近,有个项目需要使用手机GPRS上传数据,使用CMNET接入GPRS(注解1),但是此种方式流量过大,用户反映每月50块钱包500M的流量还不够用(严重怀疑中,不过我也没论证).后来仔细研究了下代码 ...

  6. Windows Mobile获取SIM卡上的所有电话号码

    从MS .NET CF版访问电话API(完整版) 以前查找了好些在.net CF框架上调用设备本地API函数读取手机SIM卡的资料,但各种资料都少了些描述,特别是少了一些引用的结构(struct),造 ...

  7. Windows Mobile动手实验集锦

    Windows Mobile动手实验集锦 http://blog.csdn.net/zhangbosun/archive/2007/06/14/1652862.aspx 不过文章里提到的一些链接已经失 ...

  8. 开发Sony Ericsson XPERIA X1上的Windows Mobile 应用程序

    最近Sony Ericsson XPERIA X1的上市的相关消息传闻很多,据说现在水货市场已经能够买到机器了.XPERIA X1最吸引开发人员的应该是那美轮美奂的UI及界面了,现在好了,索尼爱立信官 ...

  9. 关于《在Windows与.NET平台上的持续交付实践》的问答录

    <在Windows与.NET平台上的持续交付实践>(Continuous Delivery with Windows and .Net)(免费下载)是由Matthew Skelton与Ch ...

最新文章

  1. LeetCode Perfect Squares
  2. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数...
  3. 标准成本、目标成本、实际成本
  4. 搜索重复代码_LeetCode专题——详解搜索算法中的搜索策略和剪枝
  5. java开发亚马逊mws_GitHub - iotwlw/Amazon-MWS-SDK: 基于亚马逊MWS Java SDK 的封装
  6. TypeScript学习(八):数组的补充及内置对象说明
  7. mysql中防止sql注入
  8. 请描述计算机软件分类,2014年计算机一级考试MsOffice模拟题
  9. 机器学习- 吴恩达Andrew Ng - week3-3 Multiclass Classification
  10. java activiti 工作流引擎_Activiti工作流引擎简介详解
  11. 兄弟们,以后不能愉快的抽烟
  12. 30分钟让你成为photoshop钢笔工具…
  13. Linux rm过滤后的目录6,Linux 常用命令总结(一)
  14. Linux系统命令(电子邮件新闻组)
  15. /usr/bin/ld: 找不到 -lstdc++
  16. 医咖会免费SPSS教程学习笔记—Cohen’s kappa系数
  17. 手机兼容性测试--testin云测流程
  18. 微信支付-当前页面的URL未注册
  19. 数据挖掘学习——第一周周报
  20. Jetson Xavier CAN(11)

热门文章

  1. 565.Array Nesting
  2. oracle数据库的连接和常用命令用户管理
  3. 51单片机tea5767收音机 红外遥控 自动搜台 存台 DIY
  4. HTTP 报文首部之首部字段(重点分析)
  5. 箭头函数为什么不能当做构造函数
  6. DIV+CSS网页布局(新手必备)
  7. python 日期解析_如何在Python中解析ISO 8601格式的日期?
  8. linux date命令
  9. 一步一步学习医学人工智能(steps towards medical AI)
  10. android native ALooper AHandler