import socket
import json
import time
import struct
PACK_FMT_STR = '!BBHLH6s'
IP = '10.13.32.11'
Port = 19204
def packMasg(reqId, msgType, msg={}):
msgLen = 0
jsonStr = json.dumps(msg)
if (msg != {}):
msgLen = len(jsonStr)
rawMsg = struct.pack(PACK_FMT_STR, 0x5A, 0x01, reqId, msgLen,msgType, b'\x00\x00\x00\x00\x00\x00')
print("{:02X} {:02X} {:04X} {:08X} {:04X}"
.format(0x5A, 0x01, reqId, msgLen, msgType))
if (msg != {}):
rawMsg += bytearray(jsonStr,'ascii')
print(msg)
return rawMsg
so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
so.connect((IP, Port))
so.settimeout(5)
#test_msg = packMasg(1,3051,{"source_id": "LM48","id": "LM47",})
test_msg = packMasg(1,1004)
print("\n\nreq:")
print(' '.join('{:02X}'.format(x) for x in test_msg))
so.send(test_msg)
dataall = b''
# while True:
print('\n\n\n')
try:
data = so.recv(16)
except socket.timeout:
print('timeout')
so.close
jsonDataLen = 0
backReqNum = 0
if(len(data) < 16):
print('pack head error')
print(data)
so.close()
else:
header = struct.unpack(PACK_FMT_STR, data)
print("{:02X} {:02X} {:04X} {:08X} {:04X} {:02X} {:02X} {:02X} {:02X} {:02X} {:02X} length: {}"
.format(header[0], header[1], header[2], header[3], header[4],
header[5][0], header[5][1], header[5][2], header[5][3], header[5][4], header[5][5],
header[3]))
jsonDataLen = header[3]
backReqNum = header[4]
dataall += data
data = b''
readSize = 1024
try:
while (jsonDataLen > 0):
recv = so.recv(readSize)
data += recv
jsonDataLen -= len(recv)
if jsonDataLen < readSize:
readSize = jsonDataLen
print(json.dumps(json.loads(data), indent=1))
dataall += data
#print(' '.join('{:02X}'.format(x) for x in dataall))
except socket.timeout:
print('timeout')
so.close()
原文地址:http://www.cnblogs.com/zhuoss/p/16879463.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性