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

📄 module1.bas

📁 中国联通SGIP 2.0协议的源代码 java
💻 BAS
字号:
Attribute VB_Name = "Module1"
Option Explicit
'adoRs.ActiveConnection = nothing


Public Cn As New ADODB.Connection


'常量定义——内部定义
Public Const SGIP_BIND As Long = 1             '  SP用该消息向SMG发出建立连接的请求
Public Const SGIP_BIND_RESP As Long = &H80000001         'server SP对Bind命令的应答
Public Const SGIP_UNBIND As Long = 2           '  SP用该消息向SMG通知将要断开现有的连接
Public Const SGIP_UNBIND_RESP As Long = &H80000002      'server SP对Unbind命令的应答
Public Const SGIP_SUBMIT As Long = 3           '  SP用该消息向SMG请求发送短消息
Public Const SGIP_DELIVER_RESP As Long = &H80000004    'server SP用该消息对从SMG接收到的Deliver命令作出应答
Public Const SGIP_REPORT_RESP As Long = &H80000005     'server SP对从SMG接收到的Report命令作出应答

Public Const SGIP_USERRPT_RESP As Long = &H80000010   '&H11 server SP对从SMG接收到的UserRpt命令作出应答
Public Const SGIP_TRACE As Long = 4096         '  SP用该消息向SMG请求跟踪某一条MT短消息的状态


Public Const SGIP_SUBMIT_RESP As Long = &H80000011     'SMG对Submit命令的应答
Public Const SGIP_DELIVER As Long = 4          'SMG发送一条短消息到SP
Public Const SGIP_REPORT As Long = 5           'SMG用该命令通知SP一条Submit命令所发送的MT当前结果
Public Const SGIP_USERRPT As Long = 16         'SMG用该命令通知SP一条手机用户的状态信息
Public Const SGIP_TRACE_RESP As Long = &H80000100  'SMG对Trace命令的应答


Public Const MaxSubmit As Long = 100         '一次提交的最大短消息数,用于群发。

Public SeqNo As Long '消息序号A

'消息头A
 Public Message_Length As Long               '消息的总长度(字节) 4 Integer
 Public Command_ID As Long                   '命令ID  4   Integer
 Public Sequence_Number As Long              '序列号  12  Integer

'socket state A
Public sckState(9) As String

'参数设置

'错误码定义
'Public Const 0   无错误,命令正确接收
'1   非法登录,如登录名、口令出错、登录名与口令不符等。
'2   重复登录,如在同一TCP/IP连接中连续两次以上请求登录。
'3   连接过多,指单个节点要求同时建立的连接数过多。
'4   登录类型错,指bind命令中的logintype字段出错。
'5   参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。
'6   非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加"86"时都应报错。
'7   消息ID错
'8   信息长度错
'9   非法序列号,包括序列号重复、序列号格式错误等
'10  非法操作GNS
'11  节点忙,指本节点存储队列满或其他原因,暂时不能提供服务的情况
'21  目的地址不可达,指路由表存在路由且消息路由正确但被路由的节点暂时不能提供服务的情况
'22  路由错,指路由表存在路由但消息路由出错的情况,如转错SMG等
'23  路由不存在,指消息路由的节点在路由表中不存在
'24  计费号码无效,鉴权不成功时反馈的错误信息
'25  用户不能通信 (如不在服务区?未开机等情况)
'26  手机内存不足
'27  手机不支持短消息
'28  手机接收短消息出现错误
'29  不知道的用户
'30  不提供此功能
'31  非法设备
'32  系统失败
'33  短信中心队列满'
'其它 其它错误码(待定义)

 '状态值
' Public Const E_SUCCESS As Long = 0     '成功
' Public Const E_MOEXCEED As Long = &H41 '超过最大提交数
' Public Const E_MTEXCEED As Long = &H42 '超过最大下发数


'定义序列号
'Public Type SGIPindex
'    No(11) As Byte                       '12字节,前四位节点序号、中间四位时间、后四位递赠序号
'
'End Type


'定义消息头
Public Type Head
    Msglen As Double                    '4 Integer 消息的总长度(字节)
    Cmd_id As Long                      '4 Integer 命令ID
    Seq_Number As Double                '12  Integer 序列号,只记录后四个字节
    headBin(19) As Byte                 '记录原消息
    Time As String                      '时间
End Type

Public Type Bind
    Login_Type As String * 1         '1 B  登录类型。1:SP向SMG建立的连接,用于发送命令2:SMG向SP建立的连接,用于发送命令3:SMG之间建立的连接,用于转发命令4:SMG向GNS建立的连接,用于路由表的检索和维护5:GNS向SMG建立的连接,用于路由表的更新6:主备GNS之间建立的连接,用于主备路由表的一致性11:SP与SMG以及SMG之间建立的测试连接,用于跟踪测试其它:保留
    Login_Name As String * 16       '16B  服务器端给客户端分配的登录名
    Login_Passowrd As String * 16   '16B  服务器端和Login Name对应的密码
    Reserve As String * 8           '8 B  保留,扩展用
    
End Type


Public Type SubMit
    SPNumber As String * 21         'SP的接入号码
    ChargeNumber As String * 21     '付费号码,手机号码前加"86"国别标志;当且仅当群发且对用户收费时为空;如果为空,则该条短消息产生的费用由UserNumber代表的用户支付;如果为全零字符串"000000000000000000000",表示该条短消息产生的费用由SP支付。
    UserCount As String * 1           '接收短消息的手机数量,取值范围1至100
    UserNumber As String * 21       '接收该短消息的手机号,该字段重复UserCount指定的次数,手机号码前加"86"国别标志…  …  …  …
    CorpId  As String * 5           '企业代码,取值范围0-99999
    ServiceType As String * 10      '业务代码,由SP定义
    FeeType As String * 1              '计费类型
    FeeValue As String * 6          '取值范围0-99999,该条短消息的收费值,单位为分,由SP定义对于包月制收费的用户,该值为月租费的值
    GivenValue As String * 6        '取值范围0-99999,赠送用户的话费,单位为分,由SP定义,特指由SP向用户发送广告时的赠送话费
    AgentFlag  As String * 1           '代收费标志,0:应收;1:实收
    MorelatetoMTFlag As String * 1     '引起MT消息的原因0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-系统反馈引起的MT消息。
    Priority  As String * 1            '优先级0-9从低到高,默认为0
    ExpireTime As String * 16       '短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
    ScheduleTime As String * 16     '短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
    ReportFlag As String * 1           '状态报告标记0-该条消息只有最后出错时要返回状态报告1-该条消息无论最后是否成功都要返回状态报告2-该条消息不需要返回状态报告3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告其它-保留缺省设置为0
    TP_pid  As String * 1              'GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
    TP_udhi As String * 1              'GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
    MessageCoding  As String * 1       '短消息的编码格式。0:纯ASCII字符串3:写卡操作4:二进制编码8:UCS2编码15: GBK编码其它参见GSM3.38第4节:SMS Data Coding Scheme
    MessageType As String * 1          '信息类型:0-短消息信息其它:待定
    MessageLength  As String * 4          '4 Integer 短消息的长度
    MessageContent  As String       'Message Length  短消息的内容
    Reserve As String * 8           '保留,扩展用

End Type


Public Type Deliver
    Mobile_no As String        '发送短消息的用户手机号,手机号码前加"86"国别标志
    SPNumber  As String         'SP的接入号码
    TP_pid  As Integer              'GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
    TP_udhi As Integer              'GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
    MessageCoding As Integer        '短消息的编码格式。0:纯ASCII字符串3:写卡操作4:二进制编码8:UCS2编码15: GBK编码其它参见GSM3.38第4节:SMS Data Coding Scheme
    MessageLength As Long           '4   Integer 短消息的长度
    msg As String                   'Message Length  短消息的内容
    Reserve As String * 8           '保留,扩展用

End Type

Public Type Report
    SubmitSequenceNumber   As Long  ' 12  Integer 该命令所涉及的Submit或deliver命令的序列号
    ReportType  As Integer          'Report命令类型0:对先前一条Submit命令的状态报告1:对先前一条前转Deliver命令的状态报告
    UserNumber  As String * 21      '接收短消息的手机号,手机号码前加"86"国别标志
    State  As Integer               '该命令所涉及的短消息的当前执行状态0:发送成功1:等待发送2:发送失败
    ErrorCode   As Integer          '当State=2时为错误码值,否则为0
    Reserve As String * 8           '保留,扩展用

End Type


Public Type UserRpt
    SPNumber  As String * 21        'SP的接入号码
    UserNumber As String * 21       '待配置的手机号码,手机号码前加"86"国别标志
    UserCondition   As Integer      '0:注销;1:欠费停机;2:恢复正常
    Reserve As String * 8           '保留,扩展用
End Type


Public Type Trace
    SubmitSequenceNumber  As Long   '12 Integer 被跟踪MT短消息的命令序列号
    UserNumber As String * 21       '被跟踪MT短消息的目的手机号,手机号码前加"86"国别标志
    Reserve As String * 8           '保留,扩展用
End Type

Public HeadMO As Head
Public HeadMT(19) As Byte

Public BindMT As Bind
Public BindMO As Bind

Public SubMT As SubMit
Public DelMO As Deliver


Public Rpt As Report
Public URpt As UserRpt

'Public allResp As Resp
Public JieDian(3) As Byte     '节点编号

Public SGIP_err(33) As String


Public Sub Main()
    
 sckState(0) = "关闭"
 sckState(1) = "打开"
 sckState(2) = "侦听"
 sckState(3) = "连接挂起"
 sckState(4) = "识别主机"
 sckState(5) = "已识别主机 "
 sckState(6) = "正在连接"
 sckState(7) = "已连接"
 sckState(8) = "同级人员正在关闭连接"
 sckState(9) = "错误"
Dim i As Integer


    Frm_rcvMO.Show
    Frm_sndMT.Show

'命令ID
   
'消息头里的节点编号,固定值   '比如302408888(十进制)=120664B8(十六进制)
    JieDian(0) = &H12
    JieDian(1) = &H6
    JieDian(2) = &H64
    JieDian(3) = &HB8

'SGIP_err(0) = "无错误,命令正确接收"
'SGIP_err(1) = "非法登录,如登录名、口令出错、登录名与口令不符等。"
'SGIP_err(2) = "重复登录,如在同一TCP/IP连接中连续两次以上请求登录。"
'SGIP_err(3) = "连接过多,指单个节点要求同时建立的连接数过多。"
'SGIP_err(4) = "登录类型错,指bind命令中的logintype字段出错。"
'SGIP_err(5) = "参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。"
'SGIP_err(6) = "非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加“86”时都应报错。"
'SGIP_err(7) = "消息ID错"
'SGIP_err(8) = "信息长度错"
'SGIP_err(9) = "非法序列号,包括序列号重复、序列号格式错误等"
'SGIP_err(10) = "非法操作GNS"
'SGIP_err(11) = "节点忙,指本节点存储队列满或其他原因,暂时不能提供服务的情况"
'SGIP_err(21) = "目的地址不可达,指路由表存在路由且消息路由正确但被路由的节点暂时不能提供服务的情况"
'SGIP_err(22) = "路由错,指路由表存在路由但消息路由出错的情况,如转错SMG等"
'SGIP_err(23) = "路由不存在,指消息路由的节点在路由表中不存在"
'SGIP_err(24) = "计费号码无效,鉴权不成功时反馈的错误信息"
'SGIP_err(25) = "用户不能通信 (如不在服务区?未开机等情况)"
'SGIP_err(26) = "手机内存不足"
'SGIP_err(27) = "手机不支持短消息"
'SGIP_err(28) = "手机接收短消息出现错误"
'SGIP_err(29) = "不知道的用户"
'SGIP_err(30) = "不提供此功能"
'SGIP_err(31) = "非法设备"
'SGIP_err(32) = "系统失败"
'SGIP_err(33) = "短信中心队列满"


    Exit Sub
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -