欢迎光临
我们一直在努力

使用wininet编写发送短信程序_移动短信技术

建站超值云服务器,限时71元/月

  如果能够使自己程序具有短信发送功能,那将会使您的程序蓬荜生辉,特别是通讯录等程序。通常在程序中发送短信有两种方式,一种是使用GSM Modem通过计算机串口编程发送短信,这种方式需要购置硬件设备,既不方便又不经济!另一种方式是通过网络发送,我们可以先在163.com等网站上注册一个用户,然后通过这些具有短信发送功能的网站发送短信。这种方式比较经济。下面本文讲述第二种的实现方式。
   
   实际上,我们的程序只要具有象浏览器那样向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);


   return 0;
}


/*****************************************************************
* 函数介绍: 发送短信函数
* 输入参数: 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”);


        return Result;
    }



    // 选择搜狐网关发送
    if (strcmp(lpGateway, “sohu.com”)==0)
    {
        Result = 1;
        return Result;
    }


    // 网关代号不存在
    return 1;
}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用wininet编写发送短信程序_移动短信技术
分享到: 更多 (0)

相关推荐

  • 暂无文章