如何解决用于 J1939 传输协议的 Python socketcan 接口
在J1939协议中使用python和socketcan,当数据超过8个字节时,recvfrom()似乎没有返回接口。在J1939协议中,当数据字节超过8个时,会发送多条CAN报文,因为一个CAN报文最多只能容纳8个数据字节。
使用下面的程序,我看到接口返回了8个数据字节,但没有返回9个数据字节。
是 Python 的问题还是内核的问题?如果这确实是一个错误,我们如何才能找到合适的开发人员?
谢谢。
#!/usr/bin/env python3
import socket
send_socket = socket.socket(socket.PF_CAN,socket.soCK_DGRAM,socket.CAN_J1939)
interface = "vcan0"
send_socket_src_name = socket.J1939_NO_NAME
send_socket_src_pgn = socket.J1939_NO_PGN
send_socket_src_addr = 0x80
send_socket_src_sck_addr = (interface,send_socket_src_name,send_socket_src_pgn,send_socket_src_addr)
send_socket.bind(send_socket_src_sck_addr)
send_socket_dest_name = socket.J1939_NO_NAME
send_socket_dest_pgn = 0x2300
send_socket_dest_addr = 0x81
send_socket_dest_sck_addr = (interface,send_socket_dest_name,send_socket_dest_pgn,send_socket_dest_addr)
send_socket_data_8_bytes = b'\x01\x02\x03\x04\x05\x06\x07\x08'
send_socket_data_9_bytes = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09'
receive_socket = socket.socket(socket.PF_CAN,socket.CAN_J1939)
receive_socket_src_name = socket.J1939_NO_NAME
receive_socket_src_pgn = socket.J1939_NO_PGN
receive_socket_src_addr = 0x81
receive_socket_src_sck_addr = (interface,receive_socket_src_name,receive_socket_src_pgn,receive_socket_src_addr)
receive_socket.bind(receive_socket_src_sck_addr)
send_socket.sendto(send_socket_data_8_bytes,send_socket_dest_sck_addr)
(data,sock_addr) = receive_socket.recvfrom(128)
(interface,src_name,src_pgn,src_addr) = sock_addr
print(f"interface for 8 data bytes:{interface}")
send_socket.sendto(send_socket_data_9_bytes,src_addr) = sock_addr
print(f"interface for 9 data bytes:{interface}")
receive_socket.close()
send_socket.close()
这是输出:
interface for 8 data bytes:vcan0
interface for 9 data bytes:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。