将python的zmq操作直接封装成一个类,要用的时候直接使用即可
#!/usr/bin/python
# coding=utf-8
import zmq
import time
class zmqoperate:
def __init__(self, ip, port) -> None:
self.__ipport = "tcp://" + ip + ":" + port
self.__context = zmq.Context()
self.__sock = self.__context.socket(zmq.PAIR)
# self.__sock = self.__context.socket(zmq.REP)
def myzmqbind(self) -> None:
self.__sock.bind(self.__ipport)
def myzmqclose(self) -> None:
self.__sock.disconnect(self.__ipport)
self.__sock.close()
def myzmqconnect(self) -> None:
print("connect to server...... <", self.__ipport, ">")
self.__sock.connect(self.__ipport)
def myzmqread(self):
return self.__sock.recv()
def myzmqwrite(self, data) -> None:
self.__sock.send(data)
def myzmqreadjson(self):
return self.__sock.recv_json()
def myzmqwritejson(self, data) -> None:
self.__sock.send_json(data)
client端的使用:
import threading
from zmq import *
from zmqoperate import zmqoperate
sock = zmqoperate("127.0.0.1", "5555")
sock.myzmqconnect()
# 周期发送
def periodsend(mydict):
global sock
# sock.myzmqwritejson(json.dumps(mydict))
sock.myzmqwrite(mydict)
print("periodsend send thread")
# 单次发送
def singlesend(mydict):
global sock
# sock.myzmqwritejson(json.dumps(mydict))
sock.myzmqwrite(mydict)
print("single send")
# 起的定时器来进行周期发送
def startimer(proto_period, mydict):
periodsend(mydict)
threading.Timer(proto_period, startimer, (proto_period, mydict,)).start()
server端的使用:
import threading
from simu.zmqoperate import zmqoperate
i = 1
def sendtoclient():
global i
mydictlist = [0x9f, 0x2, 0x5, 0x7d, 0x30, 0x1, 0x0, i, 0x7b, 0x1f, 0x9f, 0x3]
sock.myzmqwrite(bytes(mydictlist))
i += 1
def startimer(proto_period):
sendtoclient()
threading.Timer(proto_period, startimer, (proto_period,)).start()
if "__main__" == __name__:
sock = zmqoperate("*", "5555")
sock.myzmqbind()
period = 3
startimer(period)
while True:
# message = sock.myzmqreadjson()
message = sock.myzmqread()
print(list(message))
payload = []
ucom = ucomcoder()
ucom.decode(list(message), payload)
print (payload)
结果就不展示了,只是作为自己记录代码所用,防止时间长了忘记!!!