⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mo.bas

📁 中国联通SGIP 2.0协议的源代码 java
💻 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 + -