Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
new-socketemulator
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李远洪
new-socketemulator
Commits
62293f11
Commit
62293f11
authored
Feb 10, 2020
by
liyuanhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
平台版本信息上传应答解析类
parent
fe8cf72f
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
190 additions
and
49 deletions
+190
-49
lib/protocol/message/Location_msg.py
lib/protocol/message/Location_msg.py
+2
-2
lib/protocol/message/MessageBase.py
lib/protocol/message/MessageBase.py
+29
-23
lib/protocol/message/SetTerminalParam_msg.py
lib/protocol/message/SetTerminalParam_msg.py
+1
-1
lib/protocol/message/TerminalCommonMsgRes_msg.py
lib/protocol/message/TerminalCommonMsgRes_msg.py
+1
-1
lib/protocol/message/TerminalVersionInfo_msg.py
lib/protocol/message/TerminalVersionInfo_msg.py
+16
-1
lib/protocol/messageRes/PlateformVersionInfo_res.py
lib/protocol/messageRes/PlateformVersionInfo_res.py
+117
-0
lib/socket/messageTest.py
lib/socket/messageTest.py
+24
-21
No files found.
lib/protocol/message/Location_msg.py
View file @
62293f11
...
...
@@ -96,7 +96,7 @@ class Location_msg(MessageBase):
#报警事件 ID 数据项列表
extra_FA
=
"FA"
+
self
.
int2hexStringByBytes
(
int
(
len
(
AlarmEvent_data
()
.
generateAlarmEvent_data
())
/
2
))
+
AlarmEvent_data
()
.
generateAlarmEvent_data
()
data
=
extra_01
data
=
extra_01
+
extra_02
+
extra_11
+
extra_12
+
extra_13
+
extra_FA
# data = extra_01 + extra_02 + extra_11 + extra_12 + extra_13
# data = data + extra_2A + extra_30 + extra_31 + extra_EA + extra_EB
# data = data + extra_EC
...
...
@@ -294,7 +294,7 @@ class Location_msg(MessageBase):
#######################################################
def
getMsgHeader
(
self
):
# msgID = self.int2hexStringByBytes(102,2) #消息id
msgID
=
"0
002
"
msgID
=
"0
200
"
msgBodyProperty
=
self
.
getMsgBodyProperty
(
int
(
len
(
self
.
getMsgBody
())
/
2
))
#消息体属性
phoneNum
=
self
.
int2BCD
(
13146201119
)
#终端手机号
msgWaterCode
=
self
.
int2BCD
(
1
)
#消息流水号
...
...
lib/protocol/message/MessageBase.py
View file @
62293f11
...
...
@@ -108,6 +108,17 @@ class MessageBase(Base):
dataHex
+=
hex
(
tem
)[
2
:]
return
dataHex
#######################################################
# 16进制转字符串
#######################################################
def
hex2Str
(
self
,
data
):
theStr
=
""
while
data
!=
""
:
tmp
=
data
[:
2
]
data
=
data
[
2
:]
theStr
=
theStr
+
chr
(
int
(
tmp
,
16
))
return
theStr
#####################################################
# 将字符串转换为对应的ascii值数组
#####################################################
...
...
@@ -157,30 +168,22 @@ class MessageBase(Base):
return
data
#######################################################
#
获取UTC时间转换位BCD格式
#
字符串转换为GBK的16进制
#######################################################
def
GBKString2Hex
(
self
,
data
):
data
=
str
(
"渝B23CX"
.
encode
(
"gbk"
))
data
=
data
[
2
:
len
(
data
)
-
1
]
print
(
data
)
print
(
type
(
data
))
print
(
type
(
"
\xd3\xe5
B23CX"
))
print
(
data
==
"
\xd3\xe5
B23CX"
)
print
(
data
)
print
(
b
"
\xd3\xe5
B23CX"
)
data
=
self
.
str2Hex
(
data
)
return
data
data
=
str
(
data
.
encode
(
"gbk"
))
dataHex
=
self
.
str2Hex
(
data
[
2
:
len
(
data
)
-
1
])
return
dataHex
#######################################################
# 16进制转字符串
# 16进制转
换为GBK
字符串
#######################################################
def
hex2Str
(
self
,
data
):
theStr
=
""
while
data
!=
""
:
tmp
=
data
[:
2
]
data
=
data
[
2
:]
theStr
=
theStr
+
chr
(
int
(
tmp
,
16
))
return
theStr
def
hex2GBKString
(
self
,
dataHex
):
dataStr
=
self
.
hex2Str
(
dataHex
)
data
=
bytes
(
map
(
ord
,
str
(
dataStr
)))
data
=
data
.
decode
(
"gbk"
)
return
data
...
...
@@ -189,15 +192,18 @@ class MessageBase(Base):
if
__name__
==
"__main__"
:
# print(MessageBase().str2Hex("uvwxyz"))
print
(
MessageBase
()
.
str2Ascsii
(
"uvwxyz"
))
#
print(MessageBase().str2Ascsii("uvwxyz"))
# print(MessageBase().int2hexStringByBytes(220400566542345564784802,20))
print
(
MessageBase
()
.
str2Hex
(
"a865h643gfdj64fd7432"
))
print
(
MessageBase
()
.
hex2Str
(
"61383635683634336766646a3634666437343332"
))
# print(MessageBase().str2Hex("a865h643gfdj64fd7432"))
# print(MessageBase().hex2Str("61383635683634336766646a3634666437343332"))
print
(
MessageBase
()
.
GBKString2Hex
(
"KZP200_V201001"
))
print
(
MessageBase
()
.
hex2GBKString
(
"4b5a503230305f56323031303031"
))
# print(MessageBase().str2Hex("\xd3\xe5B23CX"))
# print(MessageBase().getMsgBodyProperty())
# print(MessageBase().int2BCD(13146201117))
# print(MessageBase().getCheckCode("8001000501314620111800000000000200"))
# print(MessageBase().getMsgHeader())
# print(MessageBase().generateMsg())
# print(MessageBase().GBKString2Hex("渝B23CX"))
print
(
MessageBase
()
.
GBKString2Hex
(
"渝B23CX"
))
print
(
MessageBase
()
.
hex2GBKString
(
"5c7864335c7865354232334358"
))
lib/protocol/message/SetTerminalParam_msg.py
View file @
62293f11
...
...
@@ -42,7 +42,7 @@ class SetTerminalParam_msg(MessageBase):
#######################################################
def
getMsgHeader
(
self
):
# msgID = self.int2hexStringByBytes(102,2) #消息id
msgID
=
"
0002
"
msgID
=
"
8103
"
msgBodyProperty
=
self
.
getMsgBodyProperty
(
int
(
len
(
self
.
getMsgBody
())
/
2
))
#消息体属性
phoneNum
=
self
.
int2BCD
(
13146201119
)
#终端手机号
msgWaterCode
=
self
.
int2hexStringByBytes
(
1
,
2
)
#消息流水号
...
...
lib/protocol/message/TerminalCommonMsgRes_msg.py
View file @
62293f11
...
...
@@ -43,7 +43,7 @@ class TerminalCommonMsgRes_msg(MessageBase):
def
getMsgHeader
(
self
):
msgID
=
self
.
int2hexStringByBytes
(
102
,
2
)
#消息id
msgBodyProperty
=
self
.
getMsgBodyProperty
(
int
(
len
(
self
.
getMsgBody
())
/
2
))
#消息体属性
phoneNum
=
self
.
int2BCD
(
1314620111
8
)
#终端手机号
phoneNum
=
self
.
int2BCD
(
1314620111
9
)
#终端手机号
msgWaterCode
=
self
.
int2hexStringByBytes
(
1
,
2
)
#消息流水号
subPkgContent
=
""
#消息包封装项
data
=
msgID
+
msgBodyProperty
+
phoneNum
+
msgWaterCode
+
subPkgContent
...
...
lib/protocol/message/TerminalVersionInfo_msg.py
View file @
62293f11
...
...
@@ -6,7 +6,7 @@
from
lib.protocol.message.MessageBase
import
MessageBase
class
Ter
minalVersionInfo_msg
(
MessageBase
):
class
Ter
minalVersionInfo_msg
(
MessageBase
):
def
__init__
(
self
):
super
()
.
__init__
()
#不执行该方法,无法使用父类里面定义的属性
pass
...
...
@@ -31,6 +31,21 @@ class TerminalVersionInfo_msg(MessageBase):
#######################################################
def
getMsgBody
(
self
):
msg
=
""
softwareVersion
=
self
.
GBKString2Hex
(
"KZP200_V201001"
)
#软件版本号
softwareVersionDate
=
self
.
GBKString2Hex
(
"2020-02-10"
)
#终端版本日期
CPUId
=
self
.
str2Hex
(
"CPU-12345678"
)
#cpuId
GMSType
=
self
.
GBKString2Hex
(
"GMS-TYPE-123456"
)
#GMS型号
GMS_IMEI
=
self
.
GBKString2Hex
(
"GMS_IMEI_123456"
)
#GSM IMEI 号
SIM_IMSI
=
self
.
GBKString2Hex
(
"SIM_13146201119"
)
#终端 SIM 卡 IMSI 号
SIM_ICCID
=
self
.
GBKString2Hex
(
"SIM_ICCID13146201119"
)
#终端 SIM 卡 ICCID 号
carType
=
self
.
int2hexStringByBytes
(
22
,
2
)
#车系车型 ID
VIN
=
self
.
GBKString2Hex
(
"VIN_1234567891234"
)
#汽车 VIN 码
totalMileage
=
self
.
int2hexStringByBytes
(
389000
,
4
)
#装上终端后车辆累计总里程或车辆仪表里程(单位米)
totalOilExpend
=
self
.
int2hexStringByBytes
(
420000
,
4
)
#装上终端后车辆累计总耗油量(ml)
msg
=
msg
+
softwareVersion
+
softwareVersionDate
+
CPUId
+
GMSType
+
GMS_IMEI
msg
=
msg
+
SIM_IMSI
+
SIM_ICCID
+
carType
+
VIN
+
totalMileage
msg
=
msg
+
totalOilExpend
return
msg
#######################################################
...
...
lib/protocol/messageRes/PlateformVersionInfo_res.py
0 → 100644
View file @
62293f11
#encoding:utf-8
'''
定义平台版本信息包上传应答解码类
'''
from
lib.protocol.message.MessageBase
import
MessageBase
from
lib.protocol.messageRes.ResponseBase
import
ResponseBase
class
PlatefromVersionInfo_res
(
ResponseBase
):
def
__init__
(
self
,
msg
):
super
()
.
__init__
()
if
type
(
msg
)
==
bytes
:
self
.
msg
=
self
.
binary2ascii
(
msg
)
else
:
self
.
msg
=
msg
pass
#######################################################
# 获取消息
#######################################################
def
getMsg
(
self
):
json_msg
=
{}
json_msg
[
"header"
]
=
self
.
getMsgHeader
()
json_msg
[
"body"
]
=
self
.
getMsgBody
()
json_msg
[
"checkCode"
]
=
self
.
getCheckCode
()
json_msg
[
"calculateCheckCode"
]
=
self
.
getCalculateCheckCode
()
#自己计算消息后得到的校验码
return
json_msg
#######################################################
# 获取消息头
#######################################################
def
getMsgHeader
(
self
):
json_header
=
{}
data
=
self
.
removeIdentify
(
self
.
msg
)
data
=
self
.
restore_7e7d
(
data
)
header
=
data
[:
24
]
msgId
=
header
[:
4
]
#消息id
msgBodyProperty
=
header
[
4
:
8
]
#消息体属性
phoneNum
=
header
[
8
:
20
]
#终端手机号
msgWaterCode
=
header
[
20
:
24
]
#消息流水号
json_header
[
"msgId"
]
=
msgId
json_header
[
"msgBodyProperty"
]
=
self
.
getMsgBodyProperty
(
msgBodyProperty
)
json_header
[
"phoneNum"
]
=
phoneNum
[
1
:]
json_header
[
"msgWaterCode"
]
=
int
(
msgWaterCode
,
16
)
return
json_header
#获取消息体属性
def
getMsgBodyProperty
(
self
,
data
):
data
=
self
.
int2binStr
(
int
(
data
,
16
),
2
)
data
=
self
.
restore_7e7d
(
data
)
json_data
=
{}
subPkg
=
data
[
2
:
3
]
#分包
encryptionType
=
data
[
3
:
6
]
#加密方式
msgBodyLen
=
data
[
6
:]
#消息体长度
json_data
[
"subPkg"
]
=
int
(
subPkg
,
2
)
json_data
[
"encryptionType"
]
=
int
(
encryptionType
,
2
)
json_data
[
"msgBodyLen"
]
=
int
(
msgBodyLen
,
2
)
return
json_data
#######################################################
# 获取消息体
#######################################################
def
getMsgBody
(
self
):
json_body
=
{}
data
=
self
.
removeIdentify
(
self
.
msg
)
data
=
self
.
restore_7e7d
(
data
)
dataLen
=
len
(
data
)
body
=
data
[
24
:
dataLen
-
2
]
plateformCurrentTime
=
self
.
getBCD2GMTTime
(
body
[:
12
])
#平台当前时间
carId
=
self
.
hexString2int
(
body
[
12
:
16
])
#车型id
displacement
=
self
.
hexString2int
(
body
[
16
:
20
])
#排量
isUpdate
=
body
[
20
:]
json_body
[
"plateformCurrentTime"
]
=
plateformCurrentTime
json_body
[
"carId"
]
=
carId
json_body
[
"displacement"
]
=
displacement
json_body
[
"isUpdate"
]
=
isUpdate
return
json_body
#######################################################
# 获取校验码
#######################################################
def
getCheckCode
(
self
):
data
=
self
.
removeIdentify
(
self
.
msg
)
data
=
self
.
restore_7e7d
(
data
)
dataLen
=
len
(
data
)
checkCode
=
data
[
dataLen
-
2
:]
return
checkCode
#######################################################
# 计算消息得到校验码
#######################################################
def
getCalculateCheckCode
(
self
):
data
=
self
.
removeIdentify
(
self
.
msg
)
data
=
self
.
restore_7e7d
(
data
)
dataLen
=
len
(
data
)
data
=
data
[:
dataLen
-
2
]
calculateCheckCode
=
MessageBase
()
.
getCheckCode
(
data
)
return
calculateCheckCode
#######################################################
# 获取最原始的消息数据(没有替换7e,7d之前的状态)
#######################################################
def
getOriginalMsg
(
self
):
data
=
self
.
removeIdentify
(
self
.
msg
)
data
=
self
.
restore_7e7d
(
data
)
data
=
"7e"
+
data
+
"7e"
return
data
lib/socket/messageTest.py
View file @
62293f11
...
...
@@ -9,6 +9,7 @@ from lib.protocol.message.TerminalAuthenticate_msg import TerminalAuthenticate_m
from
lib.protocol.message.TerminalCommonMsgRes_msg
import
TerminalCommonMsgRes_msg
from
lib.protocol.message.TerminalHeartbeat_msg
import
TerminalHeartbeat_msg
from
lib.protocol.message.TerminalRegister_msg
import
TerminalRegister_msg
from
lib.protocol.message.TerminalVersionInfo_msg
import
TerminalVersionInfo_msg
from
lib.protocol.message.data.TerminalCancle_msg
import
TerminalCancle_msg
from
lib.protocol.messageRes.PlatformCommon_res
import
PlatformCommon_res
from
lib.protocol.messageRes.TerminalRegister_res
import
TerminalRegister_res
...
...
@@ -19,29 +20,31 @@ port = 9001
# msg = MessageBase().generateMsg()
# msg = TerminalCommonMsgRes_msg().generateMsg() #终端通用应答
# msg = TerminalHeartbeat_msg().generateMsg() #终端心跳
msg
=
TerminalRegister_msg
()
.
generateMsg
()
#终端注册
#
msg = TerminalRegister_msg().generateMsg() #终端注册
# msg = TerminalCancle_msg().generateMsg() #终端注销
# msg = TerminalAuthenticate_msg().generateMsg() #终端鉴权
# msg = Location_msg().generateMsg() #位置信息汇报
# msg = TerminalVersionInfo_msg().generateMsg() #终端版本信息上报
msg
=
Location_msg
()
.
generateMsg
()
#位置信息汇报
# msg = DataUpstreamTransport_msg().generateMsg() #数据上行透传消息
print
(
msg
)
BUF_SIZE
=
1024
client
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
client
.
setsockopt
(
socket
.
SOL_SOCKET
,
socket
.
SO_KEEPALIVE
,
1
)
# 在客户端开启心跳
client
.
connect
((
host
,
port
))
client
.
send
(
binascii
.
a2b_hex
(
msg
))
# client.send(bytes.fromhex(msg))
data
=
client
.
recv
(
BUF_SIZE
)
print
(
binascii
.
a2b_hex
(
msg
))
print
(
data
)
# print(binascii.b2a_hex(data))
# print(PlatformCommon_res(data).binary2ascii(data))
# print(PlatformCommon_res(data).getOriginalMsg())
# print(PlatformCommon_res(data).getMsg())
print
(
TerminalRegister_res
(
data
)
.
getMsg
())
client
.
close
()
#发送单条消息
def
sendSingleMsg
():
print
(
msg
)
BUF_SIZE
=
1024
client
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
client
.
setsockopt
(
socket
.
SOL_SOCKET
,
socket
.
SO_KEEPALIVE
,
1
)
# 在客户端开启心跳
client
.
connect
((
host
,
port
))
client
.
send
(
binascii
.
a2b_hex
(
msg
))
# client.send(bytes.fromhex(msg))
data
=
client
.
recv
(
BUF_SIZE
)
print
(
data
)
print
(
PlatformCommon_res
(
data
)
.
getMsg
())
# print(TerminalRegister_res(data).getMsg())
client
.
close
()
if
__name__
==
"__main__"
:
sendSingleMsg
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment