如果能够使自己程序具有短信发送功能,那将会使您的程序蓬荜生辉,特别是通讯录等程序。通常在程序中发送短信有两种方式,一种是使用GSM Modem通过计算机串口编程发送短信,这种方式需要购置硬件设备,既不方便又不经济!另一种方式是通过网络发送,我们可以先在163.com等网站上注册一个用户,然后通过这些具有短信发送功能的网站发送短信。这种方式比较经济。下面本文讲述第二种的实现方式。 主要就两个函数,一个就是模拟浏览器的函数,另一个是发送短信的函数,其中使用了网易作为测试样例,您还可以自己添加其他短信网关。 /***************************************************************** ////////////////////////调试用///////////////// // 清除句柄 return 0; /***************************************************************** // 登陆姓名,密码等不允许为空 // 选择网易网关发送 return Result; // 网关代号不存在
实际上,我们的程序只要具有象浏览器那样向HTTP服务器发送数据的功能,我们就可以模拟浏览器的登陆等操作,通过程序来发送短信。我们打算使用WinInet函数来实现与HTTP服务器的通信。
* 函数介绍: 执行HTTP的Post或Get方法
* 输入参数: TCHAR* hdrs – HTTP头
TCHAR* accept – Accept类型
TCHAR* Method – POST 或 GET
TCHAR* frmdata – 要提交的数据
TCHAR* ServerName – 服务器地址
TCHAR* FormAction – 数据提交到的网页名称
* 输出参数: 无
* 返 回 值: int – 返回操作状态(见SendSMS)
*****************************************************************/
int doHTTP(TCHAR* hdrs, TCHAR* accept, TCHAR* Method, TCHAR* frmdata, TCHAR* ServerName, TCHAR* FormAction)
{
// 创建Internet
HINTERNET hSession = InternetOpen(“MyAgent”,
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
if (!hSession)
{
return 5;
}
// 连接服务器
HINTERNET hConnect = InternetConnect(hSession,
ServerName,
INTERNET_DEFAULT_HTTP_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,
1);
if (!hConnect)
{
return 2;
}
// 创建一个请求
HINTERNET hRequest = HttpOpenRequest(hConnect,
Method,
FormAction,
HTTP_VERSION,
NULL,
(const char**)&accept,
0,
1);
if (!hRequest)
{
return 2;
}
// 发送请求
BOOL bSendRequest = HttpSendRequest(hRequest,
hdrs,
strlen(hdrs),
frmdata,
strlen(frmdata));
if (!bSendRequest)
{
return 2;
}
#ifdef _DEBUG
int bDoLoop = 1;
LPTSTR szReadBuffer;
DWORD lNumberOfBytesRead;
FILE* f1;
szReadBuffer = (LPTSTR) malloc(500);
ZeroMemory(szReadBuffer, 500);
if ((f1=fopen(“c:\\test.htm”, “w”))!=NULL)
{
while(bDoLoop)
{
bDoLoop = InternetReadFile(hRequest, szReadBuffer, 500, &lNumberOfBytesRead);
fseek(f1, 0L, SEEK_END);
fwrite(szReadBuffer, sizeof(szReadBuffer), lNumberOfBytesRead, f1);
if (lNumberOfBytesRead<500)
bDoLoop = 0;
}
}
fclose(f1);
free(szReadBuffer);
#endif
//////////////////////////////////////////////////
if (hRequest)
InternetCloseHandle(hRequest);
if (hConnect)
InternetCloseHandle(hConnect);
if (hSession)
InternetCloseHandle(hSession);
}
* 函数介绍: 发送短信函数
* 输入参数: char* lpGateway – 发送网关名称
char* lpUserName – 发送者登陆账号
char* lpPassword – 发送者登陆密码
char* lpPhone – 接收者手机号码
char* lpContent – 发送内容
char* lpNickName – 发送者昵称
char* lpExtent – 扩展信息
* 输出参数: 无
* 返 回 值: int 00 – 操作完成,结果未知
01 – 网关代号不存在
02 – 网络连接超时
03 – 用户中止操作
04 – 网关/账号/手机/短信内容空白或非法
05 – 出现其他错误
*****************************************************************/
SENDSMS_API int CALLAGREEMENT SendSMS(char* lpGateway,
char* lpUserName,
char* lpPassword,
char* lpPhone,
char* lpContent,
char* lpNickName,
char* lpExtent
)
{
int Result;
static TCHAR hdrs[] = _T(“Content-Type: application/x-www-form-urlencoded”);
static TCHAR accept[] = _T(“Accept: */*”);
static TCHAR frmdata[1024];
if ((strlen(lpGateway)<=0)||(strlen(lpUserName)<=0)||
(strlen(lpPassword)<=0)||(strlen(lpPhone)<=0)||(strlen(lpContent)<=0))
return 4;
if (strcmp(lpGateway, “163.com”)==0)
{
// 登录短信发送系统
sprintf(frmdata, “username=%s&password=%s”, lpUserName, lpPassword);
Result = doHTTP(hdrs, accept, “POST”, frmdata, “reg4.163.com”, “/in.jsp”);
// 发送短信
if (strlen(lpNickName)>0)
sprintf(frmdata, “send=1&phone=%s&message=%s–%s”, lpPhone, lpContent, lpNickName);
else
sprintf(frmdata, “send=1&phone=%s&message=%s”, lpPhone, lpContent);
Result = doHTTP(hdrs, accept, “POST”, frmdata, “sms.163.com”, “/service/sendmsg_pop.php”);
// 退出短信发送系统
sprintf(frmdata, “username=%s”, lpUserName);
Result = doHTTP(hdrs, accept, “GET”, frmdata, “reg4.163.com”, “/Logout.jsp”);
}
// 选择搜狐网关发送
if (strcmp(lpGateway, “sohu.com”)==0)
{
Result = 1;
return Result;
}
return 1;
}
使用wininet编写发送短信程序_移动短信技术
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用wininet编写发送短信程序_移动短信技术
相关推荐
- 暂无文章
