用新飞信信息发信息到底使唔使钱噶?

这段时间,我在学习vc。以前一直是在用C#和Java的,最近发现MFC还是有一定的用处的,所以就利用暑假这段时间来学习一下。但是光看书没有用,几个月之前,我用C#实现了一个飞信发短信的接口。所以这次,以学习MFC为目的,写了一个MFC版的飞信发短信接口。开发工具用的是Visual studio 2005。 & & 其中用到了MFC中的众多功能,如Socket、CString类的使用、Winnet、加密(hash)、ATl提供的正则表达式库和调用Dom解析xml等等。最后,我将该接口做成了一个MFC dll,从而也学习了MFC dll的制作和使用。编译的时候采用默认的Unicode编码。另外,其中还涉及到编码的转换等等。在处理字符串的时候基本都用CString,不知道这种习惯好不好。& & 接口中只提供一个CFetion类,其中提供3个函数,功能主要登陆、发送短信和登出,相当简单,一看就明白。由于其中调用了Com,所以调用的时候需要进行Com的初始化工作。下面是一个使用的例子:#include &Fetion.h&
#pragma comment(lib, &MFCFetionSDK.lib&)
CoInitialize(NULL);
CFetion fetion(_T(&你的手机号&), _T(&你的密码&));
fetion.Login();
fetion.SendSMSToPhone(_T(&好友手机号&), _T(&要发送的消息。&));
fetion.Logout();
CoUninitialize();
复制代码速度方面,我测试一下,还是相当快的,占的内存也非常的少。& & 关于飞信协议方面,还是采用MD5进行加密的,改成SHA1也相当简单。在我之前的文章中,我讲到一些关键技术的实现方法。由于刚刚初学MFC,其中肯定写得很烂,所以代码先不提供了。如果有需要,可以发邮件给我。。& & 下面说一下,我解决的几个关键性的问题,也方便刚初学MFC的朋友。& & 1、如何导出MFC类?& & 这个问题折磨了我很久,vs2005中新建一个MFC dll的时候会产生一个.def文件,用来导出函数,但我上网查了好多资料,都没有实现用.def导出类。网上有说可以生成map文件后,通过查看其中的信息导出类中的函数。我嫌麻烦,最后通过AFX_CLASS_EXPORT进行导出的。导入用AFX_CLASS_IMPORT。& & 2、如何用afxinet.h访问https& & 飞信在登录的时候用到https,好像我试了一下http同样是可行的,但是我觉得不够安全,所以选择使用https。但是这和C#中一样,访问https的是有会出现证书的问题。网上资料很少,可能是我找资料的方法不对,最后在一个国外网站上找到一个solution。& & & & AfxParseURL(url, type, server, param, port);
& & & & connection = session.GetHttpConnection(server, port);
& & & & if(type == 4107)
& & & & & & & & file = connection-&OpenRequest(CHttpConnection::HTTP_VERB_GET, param, NULL, 1, NULL, NULL, INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID);
复制代码3、编码转换和hash的计算& & 编码转换用的Windows api中的WideCharToMultiByte和MultiByteToWideChar。而hash用的是#include &wincrypt.h&。下面是我用到的工具类。#pragma once
#pragma region& 编码CodePage表
enum CodePages
& & IBM037=37,
& & IBM437=437,
& & IBM500=500,
& & ASMO_708=708,
& & DOS_720=720,
& & ibm737=737,
& & ibm775=775,
& & ibm850=850,
& & ibm852=852,
& & IBM855=855,
& & ibm857=857,
& & IBM860=860,
& & ibm861=861,
& & DOS_862=862,
& & IBM863=863,
& & IBM864=864,
& & IBM865=865,
& & cp866=866,
& & ibm869=869,
& & IBM870=870,
& & windows_874=874,
& & cp875=875,
& & shift_jis=932,
& & ks_c_9,
& & big5=950,
& & utf_16=1200,
& & unicodeFFFE=1201,
& & windows_,
& & windows_,
& & Windows_,
& & windows_,
& & windows_,
& & windows_,
& & windows_,
& & windows_,
& & windows_,
& & Johab=1361,
& & macintosh=10000,
& & x_mac_japanese=10001,
& & x_mac_chinesetrad=10002,
& & x_mac_korean=10003,
& & x_mac_arabic=10004,
& & x_mac_hebrew=10005,
& & x_mac_greek=10006,
& & x_mac_cyrillic=10007,
& & x_mac_chinesesimp=10008,
& & x_mac_romanian=10010,
& & x_mac_ukrainian=10017,
& & x_mac_thai=10021,
& & x_mac_ce=10029,
& & x_mac_icelandic=10079,
& & x_mac_turkish=10081,
& & x_mac_croatian=10082,
& & utf_32=12000,
& & utf_32BE=12001,
& & x_Chinese_CNS=20000,
& & x_Chinese_Eten=20002,
& & x_IA5=20105,
& & x_IA5_German=20106,
& & x_IA5_Swedish=20107,
& & x_IA5_Norwegian=20108,
& & us_ascii=20127,
& & IBM273=20273,
& & IBM277=20277,
& & IBM278=20278,
& & IBM280=20280,
& & IBM284=20284,
& & IBM285=20285,
& & IBM290=20290,
& & IBM297=20297,
& & IBM420=20420,
& & IBM423=20423,
& & IBM424=20424,
& & x_EBCDIC_KoreanExtended=20833,
& & IBM_Thai=20838,
& & koi8_r=20866,
& & IBM871=20871,
& & IBM880=20880,
& & IBM905=20905,
& & EUC_JP=20932,
& & koi8_u=21866,
& & iso_91,
& & iso_92,
& & iso_93,
& & iso_94,
& & iso_95,
& & iso_96,
& & iso_97,
& & iso_98,
& & iso_99,
& & iso_03,
& & iso_05,
& & x_Europa=29001,
& & iso_8859_8_i=38598,
& & iso_2022_jp=50220,
& & csISO2022JP=50221,
& & iso_2022_kr=50225,
& & euc_jp=51932,
& & EUC_CN=51936,
& & euc_kr=51949,
& & hz_gb_,
& & x_iscii_de=57002,
& & x_iscii_be=57003,
& & x_iscii_ta=57004,
& & x_iscii_te=57005,
& & x_iscii_as=57006,
& & x_iscii_or=57007,
& & x_iscii_ka=57008,
& & x_iscii_ma=57009,
& & x_iscii_gu=57010,
& & x_iscii_pa=57011,
& & utf_7=65000,
& & utf_8=65001
#pragma endregion
class CUtils : public CObject
& & CUtils();
& & virtual ~CUtils();
& & static void UnicodeToOther(const CStringW &src, CStringA& result, CodePages codePage);
& & static void OtherToUnicode(const CStringA& src, CStringW& result, CodePages codePage);
& & static void EncodingConvert(const CStringA& src, CodePages srcCodePage, CStringA& result, CodePages resultCodePage);
& & static CStringA ComputeHash(const CStringA& pbData, UINT algId);
CUtils::CUtils()
CUtils::~CUtils()
void CUtils::UnicodeToOther(const CStringW &src, CStringA &result, CodePages codePage)
& & int n = WideCharToMultiByte(codePage, 0, src.GetString(), -1, 0, 0, 0, 0 );
& & WideCharToMultiByte(codePage, 0, src.GetString(), -1, result.GetBuffer(n), n, 0, 0 );
& & result.ReleaseBuffer();
void CUtils::OtherToUnicode(const CStringA &src, CStringW &result, CodePages codePage)
& & int n = MultiByteToWideChar(codePage, 0, src.GetString(), -1, NULL, 0);
& & MultiByteToWideChar(codePage, 0, src.GetString(), -1, result.GetBuffer(n), n);
& & result.ReleaseBuffer();
void CUtils::EncodingConvert(const CStringA &src, CodePages srcCodePage, CStringA &result, CodePages resultCodePage)
& & CStringW
& & OtherToUnicode(src, buffer, srcCodePage);
& & UnicodeToOther(buffer, result, resultCodePage);
CStringA CUtils::ComputeHash(const CStringA& pbData, UINT algId)
& & HCRYPTPROV hP
& & CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
& & HCRYPTHASH hH
& & //Alg Id:CALG_MD5,CALG_SHA
& & CryptCreateHash(hProv, algId, 0, 0, &hHash);
& & CryptHashData(hHash, (const BYTE*)pbData.GetString(), pbData.GetLength(), 0);
& & CStringA pbOutH
& & DWORD dwHashL
& & DWORD dwLen = sizeof(dwHashLen);
& & CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)(&dwHashLen), &dwLen, 0);
& & dwLen = dwHashL
& & CryptGetHashParam(hHash, HP_HASHVAL, (BYTE*)pbOutHash.GetBufferSetLength(dwLen), &dwLen, 0);
& & CryptDestroyHash(hHash);
& & CryptReleaseContext(hProv, 0);
& & return pbOutH
复制代码其中用到的都是CString,Unicode用的是CStringW,多字节的用的是CStringA。这好像在VC6中只有CString,并不分什么CStringA和CStringW。所以这不适合在VC6中使用。 那个Codepages是我从C#中找过来的,竟然发现一个重复的,我直接做删除处理,也不知道对不对,但我知道utf-8是对的。& & 4、关于头文件的问题& & 我的dll中Fetion.dll中远不只这三个函数,还有很多私有函数和私有成员。我在提供Fetion.h中都删除了,开始发现删除之后不好用了,后来我把其中要到的指针成员改成普通的对象就好用了。但是在debug的版本的时候,告诉我fetion对象被破坏了,不知道怎么回事。幸好在release版本中,一切正常。& & 5、关于飞信& & 飞信的协议分析,我是借助别人的成果,我自己没有去抓包分析,也没有去反编译,和我写的C#版本一样,是通过看别人用php版本,翻译过来的。&
通过这个简单的小例子,基本对MFC的非窗体使用有了一个了解,会运用各种东西来处理自己想要的效果。对于窗体编程,我的经验不是很多。我也编写了一个小例子,一个隐藏和现实窗口的小程序。在以后的文章中介绍。DLL和例子:
附件: 亲,您没有权限下载或查看附件喔:-)
试试 或 吧!
有提供fetion的库下载不?
回复 2# yu2212 的帖子
有DEMO源码和库下载
回复 3# cobra 的帖子
有库下载就是好哇。。哈哈
有很用的东西
为什么下载不了啊
brilli****
感谢,下载下来学习下
看看 ms以前见过
Powered by
CopyRight &你地见到系步行街见到星光珠宝的观光车,其实使唔使比钱搭噶?_百度知道
你地见到系步行街见到星光珠宝的观光车,其实使唔使比钱搭噶?
成日见到星光珠宝部观畅处扳肺殖镀帮僧爆吉光车走来走去,有时我会上去搭车噶冲动。(因为行街行得耐好易就脚软啦) 其实搭过部车使唔使钱噶?::em06::
提问者采纳
我都知系免费,我都真系一次都未坐过握。我行得步行街既梗系要买野啦,坐上部车使鬼行街先啊
查畅处扳肺殖镀帮僧爆吉看原帖&&
其他类似问题
为您推荐:
观光车的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁用飞信发信息到底使唔使钱噶?
用飞信发信息到底使唔使钱噶?
如果你開通GPRS好似同上QQ一樣係計流量咖。唔使扣錢噶。不過如果你未下載飛信噶軟件回信息系要錢噶。平時發短信甘咯。下載左用飛信上就唔使扣錢喇!
其他回答 (3)
不要钱,,但是手机端回飞信的信息就需要1毛钱了!
要钱,就是扣GPRS的流量.
相关知识等待您来回答
手机领域专家
& &SOGOU - 京ICP证050897号}

我要回帖

更多关于 新飞信信息 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信