外网网站牵手内网短信服务

公司内部有台可以收发短信的计算机,短信包年,也就是说----费用一定,短信条数不限制。
可以收发短信的计算机挂了一个短信模块,但是,被一个(职守的)应用程序24小时占用,看来是没有利用的可能了,非也.
独占的方式着实可恶,不过开发职守软件的程序员非常可爱,开了一个UDP端口的侦听进程。他的程序用Dlphi6做的,显然他的源代码不会给我,我也没有开口要。
一、我要做的是,用VB写一段发送UDP的缎子,实现在内部(局域网)自由发短信息。
首先用我不熟悉的Delphi实现对接,服务端使用的是TIDUDPServer控件,客户端核心代码如下:
-----------------
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
s:string;
begin
  IdUdpClient1.Host:=edit5.Text;
  IdUdpClient1.Port:=strtoint(edit6.Text);
  IdUdpClient1.Active:=true;

  IdUdpClient1.ReceiveTimeout:=5000;

  if ((edit1.Text='') or  (edit2.Text='') or (edit7.Text='') or (Memo2.Text='')) then
  begin
    Application.MessageBox(pchar('不能为空!'),'提示',MB_OK+MB_ICONINFORMATION);
    exit;
  end;

  str:='*('+trim(edit1.Text)+';'+trim(edit2.Text)+';'+trim(edit7.Text)+';'+trim(Memo2.Text)+')';
  IdUdpClient1.Send(str);
  s:=  IdUdpClient1.ReceiveString();
Application.MessageBox(pchar(s),'提示',MB_OK+MB_ICONINFORMATION); 
 
end;
---------------
用tIdUdpClient发送数据,由TIDUDPServer接受数据,显然是没有问题。但是我不熟悉Delphi,要进一步开发的话,还是要使用俺熟悉的VB来做,当然VB中没有tIdUdpClient控件,在VB中有类似控件Winsock,选择UDP协议,核心代码如下:
----------------
'<160个字符
Private Sub Command1_Click()
Dim str As String
    str = "admin" & ";" & "admin888"  '用户名和口令
    str = "*(" + Trim("admin") + ";" + Trim("admin") + ";" + Trim(Text1.Text) + ";" + Trim(Text2.Text) + ")" '对方手机号码和发送内容
    If Winsock1.State = 0 Then Winsock1.Connect
    'Winsock1.State
    Winsock1.SendData str
    Winsock1.GetData str
   
End Sub

Private Sub Form_Load()
    Winsock1.RemoteHost = "10.xx.xxx.xxx"
     Winsock1.RemotePort = 3006
End Sub
-------------------
上面的代码顺利实现了和TIDUDPServer对接的功能,显然也就实现了内部网络用户免费发短信的功能。如此以来,
内部网络应用就多了,比如报警功能:当数据库作用用新记录或者某个特征值达到标准时,自动发短信警告用户,也是不错的应用。
再比如远程控制,当远程RTU使用手机模块的使用,遥测数据或者远程控制,都是可以的。还有个优势是:本短信在移动公司排队靠前,也就是说,响应时间非常快,基本上在秒级。
下面还是回到基本功能应用吧

二、外网发短信息

分析和实现:端口是可以影射的,但是,网络总出口路由器俺控制不了,此路不同。用VNN 实现虚拟网络,做起来很不方便,你需要在外网的计算机上安装VNN 。还是另想办法。思路是:利用租用的虚拟主机网站支持ASP的便利,做一个使用ACCESS的网页,验证用户,然后写入待发送短信息的表中。以上网页的任务完成。扩充上面(一)中提到的VB程序,循环定时获取网站ACCESS中待发送的短信息列表,有新记录时发出。

1、网页的完成
一个ASP的留言板程序,具备填写留言,管理删除留言功能就可以了。网上有很多具备上述功能的留言板ASP源代码。这里只截取部分重要代码,以便说明问题
读取留言,其中手机号码正确的留言(短信息)将被发送,然后程序自动删除该记录。这个程序同时被VB程序调用。
------------
<%@LANGUAGE="VBScript" codepage="936"%>
<!--#include file="conn.asp"-->
<%
set rs=server.createobject("adodb.recordset")
sql="select id,user,qq,email,content,data from main order by id desc"
rs.open sql,conn,1,1
%>
<html>
<head>
<title></title>
<link href="style.css" _fcksavedurl=""style.css"" _fcksavedurl=""style.css"" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body>
hhstar
<br>
<%do while not rs.eof%>
<%=rs("id")%>
<br>
<%=rs("user")%>
<br>
<%=rs("qq")%>
<br>
<%=rs("email")%>
<br>
<%=rs("content")%>
<br>

<%
rs.movenext
loop
%>

</body>
</html>
<%
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
-------------
删除记录,被送到短信缓冲区的记录被删除。这个过程被VB程序调用。
----------
<%@LANGUAGE="VBScript" codepage="936"%>
<%if session("admin")<>"" then%>
<!--#include file="conn.asp"-->
<%
set rs=server.createobject("adodb.recordset")
id=Request.QueryString("id")
sql="select * from main where id="&id
rs.open sql,conn,2,3
rs.delete
rs.update
%>
<html>
<head>
<title>删除成功!</title>
<link href="style.css" _fcksavedurl=""style.css"" _fcksavedurl=""style.css"" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
body {margin-top: 50px;}
-->
</style>
<meta http-equiv="refresh" content="2;URL=mymanage.asp">
</head>
<body>
<div align="center">删除成功,2秒钟后自动跳转到<a href="mymanage.asp">管理员页面</a></div>
</body>
</html>
<%
else
response.Redirect("admin.asp")
end if%>
--------
2、vb程序功能的完善
 基本功能是:定时器定时调用上面的代码,监视网站留言,如果发现有符合规则的留言,就认为是需要发送的短信息,提取发送手机号码和内容,写入内部网络短信服务器缓冲区,交服务器发送短信息。这个程序运行在短信服务器上或者内部网络的任何一台计算机上。

核心代码为:
---------------
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
'过程的作用是向短信服务器发送网站留言(短信息)内容。
Dim strhttp1() As String
Dim str As String
Dim str1, str2 As String
Dim i As Long

        txtHtml.Text = WebBrowser1.Document.body.innerText
        strhttp1 = Split(txtHtml.Text, vbCrLf)
        If Trim(strhttp1(0)) = "hhstar" Then
            For i = 1 To UBound(strhttp1) - 1 Step 5
           
                str1 = Trim(strhttp1(i + 3))
                If Len(str1) = 11 And IsNumeric(str1) Then
                    str2 = Trim(strhttp1(i + 4))
                    str = "*(" + Trim("XXXXX") + ";" + Trim("XXXXX") + ";" + Trim(str1) + ";" + Trim(str2) + ")"
                    If Winsock1.State = 0 Then Winsock1.Connect
                    'Winsock1.State
                    Winsock1.SendData str
                    'DoEvents
                    Winsock1.GetData str
                    Debug.Print str

                        manage Text3.Text & "del.asp?id=" & Trim(strhttp1(i))

                End If
            Next
        End If
End Sub
Private Sub manage(MYurl As String)'这个过程的作用自动以管理员的身份登陆到管理页面并删除已经发送的记录

     ReDim aByte(0) As Byte ' Array of bytes to hold data to post

      cPostData = "admin=admin&password=xxxxxxx"

      PackBytes aByte(), cPostData

      Dim vPost As Variant

      vPost = aByte ' Assign the byte array to a VARIANT

      Dim vHeaders As Variant

      vHeaders = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)

      WebBrowser1.Navigate Text3.Text & "checkpass.asp", , , vPost, vHeaders
       DoEvents
       Sleep (100)
     WebBrowser1.Navigate MYurl

End Sub
--------------------
以上VB程序在win2000/2003/XP+VB6下通过,asp代码在IIS6环境和虚拟主机环境下通过。整个过程配合紧密,延时为0.7-3.1秒之间。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值