微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么python3上的socket.recv返回丢失最后一个字节的值?

如何解决为什么python3上的socket.recv返回丢失最后一个字节的值?

所以我有这样的python代码,可以向端口发送和接收UDP数据包

  s = socket(AF_INET,SOCK_DGRAM)
  UDP_IP = '1.0.0.45'
  UDP_PORT = 8100
  s.connect((UDP_IP,UDP_PORT))
  r = s.send(ethernet_packet + payload)
  data = s.recv(1024)
  print(data)

数据包已成功发送,在tcpdump中,我收到的udp数据包是

enter image description here

但是接收到的数据是这样打印的:b'\xff\xff\xff\xff\xff\xff\x00\x01\x00\x00\x00\x08\x80\x04\xc0\x00\x00\x00\x009' 最后一个字节应该是“ x39”,由于某种原因缺少3,有人知道为什么吗? adv中的Thx

解决方法

这是预期的行为。如果python可以将字节对象中的字节表示为ASCII,则它将。 b'9'只是b'\ x39',但是python倾向于使用ASCII来提高可读性。

>>> b"\x39"
b'9'

string literals的Python文档指示ASCII字符和带十六进制值的字符在字节字符串中有效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。