问题说明:
遇到发送过来的数据有一位是有问题的,但后面的数据是有效,还得用。甲方不愿意改信号。所以用代码直接在接收到数据后,将错误的数据位改正。
下面是修改后的demo例子:
import socket
def main(funcode):
dict1 = {}
# 1创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.绑定一个本地信息
localaddr = ("127.0.0.1",7788) # 必须绑定自己电脑IP和port
udp_socket.bind(localaddr)
# 3.接收数据
dict1 = {}
while True:
recv_data = udp_socket.recvfrom(1024)
recv_msg,send_addr = recv_data # 信息内容
print(recv_msg,len(recv_msg),recv_msg.hex())
a = recv_msg[1:2]
print(a,type(a))
new_msg = recv_msg.replace(bytes(a), b'\x00',1)
print(new_msg)
old_msg = dict1.get(funcode)
print("oldmsg", old_msg)
if old_msg == new_msg:
pass
else:
dict1[funcode] = new_msg
print(dict1)
test = new_msg
if 0x03 ==test[3]:
print("test end")
else:
print("error")
udp_socket.close()
if __name__ == "__main__":
main("msg")
*************************输出***********************************
b'\x00\x01\x02\x03\x04\x01\x05' 7 00010203040105
b'\x01' <class 'bytes'>
b'\x00\x00\x02\x03\x04\x01\x05'
oldmsg None
{'msg': b'\x00\x00\x02\x03\x04\x01\x05'}
test end
b'\x00\x01\x02\x03\x04\x01\x05' 7 00010203040105
b'\x01' <class 'bytes'>
b'\x00\x00\x02\x03\x04\x01\x05'
oldmsg b'\x00\x00\x02\x03\x04\x01\x05'