文章分类 | 软件分类 | 最新软件 | 杀毒软件 | 实用软件  | MTV下载  | 设为首页 |
  | 下载分类 | 最近更新
您的位置: 首页 >> 文章首页 >> 网络冲浪 >> 网络其他 >>  
网络其他点击TOP10
·用iptables实现NAT2006-2-5 12:26:49
·NT的19个秘密武器2006-2-6 8:44:28
·网上发现神秘代码 安全专家纷纷探究缘由2006-2-6 8:49:29
·突破限制传输文件2006-2-5 12:16:27
·VPN架设速成手册2006-2-10 13:43:24
·重要文件要用网络相册来隐藏2006-2-8 17:56:25
·仔细辨析Windows 98/Me的三种登录方式2006-2-5 13:34:31
·JRun常见问题回答2006-2-9 14:45:50
·不用软件邮箱也能变网络硬盘2006-2-9 21:03:27
·短信网关在短信服务中的作用2006-2-5 13:43:14
网络冲浪点击TOP10
·去除IE地址栏中的网址2006-2-5 12:45:08
·入侵检测系统之LIDS篇2006-2-5 10:58:21
·IP网络路由技术2006-2-9 19:14:24
·让“TE”变“IE”的移花接木大法2006-2-5 19:26:30
·巧改设置强化3389入侵2006-2-6 9:00:42
·我的常州装饰网如何建立的2006-2-5 13:35:30
·用Ipconfig获取最新的网络配置2006-2-6 10:14:20
·海阳asp木马的漏洞2006-2-5 13:51:57
·[常用]另类可执行文件压缩软件PECompact2006-2-6 7:50:02
·很酷的一篇入侵分析2006-2-5 12:35:56

 

使用WinInet编写发送短信程序
作者:我去下载           时间:2006-2-9 16:34:28


  如果能够使自己程序具有短信发送功能,那将会使您的程序蓬荜生辉,特别是通讯录等程序。通常在程序中发送短信有两种方式,一种是使用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;
}

分页:
相关文章:
Copyright© 2005-2006 wqxz.com, All Rights Reserved. 购买虚拟主机请与本站联系