1, enviados
DEF la send_data (S,): el tiempo Verdadero: # impresión ( 'abierto hilo de transmisión de datos --------') s.sendto ( ' STATE_CODE_ML: 0: funcionamiento normal de la máquina módulo de aprendizaje ' .encode ( " UTF . 8 ' ), ( ' 127.0.0.1 ' , 8002 )) el time.sleep ( . 1)
2, la receptora
DEF recv_data (S,): los mientras Verdadero: # ( 'datos abertura roscada que reciben --------') de impresión de datos = s.recvfrom (1024 ) Imprimir ( ' {} {} ' .formato (Data [0 ] .decode ( ' UTF. 8 ' ), Data [. 1]))
Nota recvfrom, si la función bloqueará no recibidos;
1024 no es un puerto, pero recibe 1024 bytes de tamaño, y [esto] no es lo mismo en otros idiomas
3, llamada
si __name__ == " __main__ " : cfg = GET_CONFIG () address_rcv = (cfg.get ( ' general ' , ' UDP_IP ' ), int (cfg.get ( ' general ' , ' UDP_RCV_PORT ' ))) udp_rcv = socket (AF_INET , SOCK_DGRAM) udp_rcv.bind (address_rcv) thread_recv = threading.Thread (target = recv_data, args = (udp_rcv,)) thread_recv.start () address_send = (cfg.get (' General ' , ' UDP_IP ' ), int (cfg.get ( ' generales ' , ' UDP_SEND_PORT ' ))) udp_send = socket (AF_INET, SOCK_DGRAM) udp_send.bind (address_send) thread_send = threading.Thread (objetivo = SEND_DATA, args = (udp_send,)) thread_send.start () Heart_Beat (udp_send)
Tenga en cuenta que los parámetros tienen que ser un formato tupla, por lo que añadir una coma;
Dado que la función de recepción puede bloquear, por lo que si necesita enviar ciclo de datos, no se puede utilizar el mismo socket, estoy aquí es utilizar los dos puertos que corresponden a dos sockets