📄 mo.bas
字号:
Attribute VB_Name = "MO"
Option Explicit
Dim RS As New ADODB.Recordset
Public Function DeliverMX(sck As Winsock) As Integer
'分析SMG发送的短信MO
Dim i As Integer
Dim J As Integer
Dim tmp As String
Dim Bins() As Byte
tmp = ""
sck.GetData Bins, vbByte, 21
With DelMO 'type类型全局变量
tmp = StrConv(Bins, vbUnicode)
.Mobile_no = Mid(tmp, 3, 11) '手机号
sck.GetData Bins, vbByte, 21
tmp = StrConv(Bins, vbUnicode)
.SPNumber = Left(tmp, 4) 'sp号
sck.GetData Bins, vbByte, 3
i = 0
.TP_pid = Bins(i): i = i + 1
.TP_udhi = Bins(i): i = i + 1
.MessageCoding = Bins(i): i = i + 1 '短消息编码类型
sck.GetData Bins, vbByte, 4
.MessageLength = Msglen(Bins, i) '取短消息长度
sck.GetData Bins, vbByte, .MessageLength
Select Case .MessageCoding
Case 0 'ascii码
tmp = StrConv(Bins, vbUnicode)
Case 3 '写卡操作
Case 4 '二进制编码
Case 8 'UCS2编码
tmp = StrConv(Bins, vbUnicode)
'.msg = Tmp
Case 15 'GBK编码
tmp = StrConv(Bins, vbUnicode)
End Select
.msg = tmp
'最后8位保留,扩展用。未作处理
sck.GetData Bins, vbByte
'写临时表 记录收到的信息
'.msg '短消息
'.Mobile_no '手机号
End With
End Function
Public Function Msglen(ByRef Bins() As Byte, start As Integer) As Long
'返回数据包里的短消息的长度
Msglen = 256 * Bins(2) + Bins(3) '一般短消息长度不会超过255,暂时这么处理
End Function
Public Function BindMX(sck As Winsock) As Integer
'分析SMG的申请
Dim Myname As String
Dim Mypass As String
Dim i As Integer
Dim TmpBin() As Byte
sck.GetData TmpBin, vbByte, 1
With BindMO
.Login_Type = TmpBin(i) '
If .Login_Type <> 2 Then BindMX = 7 '消息ID错
sck.GetData TmpBin, vbByte, 16
Myname = StrConv(TmpBin, vbUnicode)
sck.GetData TmpBin, vbByte, 16
Mypass = StrConv(TmpBin, vbUnicode)
sck.GetData TmpBin, vbByte, 1
'未验证用户名及密码
End With
End Function
Public Function SendResp(ErrNo As Integer, sck As Winsock, Kind As Long, Xuhao() As Byte) As Long
'发送对SMG的应答
Dim tBin() As Byte
'ErrNo 错误号
'sck winsock
'Kind 命令ID
'Xuhao() 网关的序号 12个字节
'body 9个字节
'总长度'命令'时间'递增序号
SendHeadResp 29, Kind, Xuhao, sck
'消息体
If Kind <> SGIP_UNBIND_RESP Then
tBin = StrConv(Chr(ErrNo) & Chr(0), vbFromUnicode)
sck.SendData tBin
End If
End Function
Public Function ReportMX(sck As Winsock) As Long
Dim Bins() As Byte
Dim tmp As String
Dim Myint As Integer
tmp = ""
sck.GetData Bins, vbByte, 12 '序列号
sck.GetData Bins, vbByte, 1 'Report命令类型0:对先前一条Submit命令的状态报告1:对先前一条前转Deliver命令的状态报告
sck.GetData Bins, vbByte, 21 '接收短消息的手机号,手机号码前加"86"国别标志
tmp = StrConv(Bins, vbUnicode)
tmp = Mid(tmp, 3, 11) '手机号
sck.GetData Bins, vbByte, 1 '该命令所涉及的短消息的当前执行状态0:发送成功1:等待发送2:发送失败
Myint = Bins(0)
sck.GetData Bins, vbByte, 1 '当State=2时为错误码值,否则为0
sck.GetData Bins, vbByte '保留,扩展用
ReportMX = 0
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -