esp-idf/examples/protocols/sockets/scripts/run_udp_client.py
2022-12-16 19:03:25 +08:00

53 lines
1.7 KiB
Python

# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0
import argparse
import os
import socket
DEF_PORT = 3333
DEF_MESSAGE = 'Data to ESP'
def udp_client(address: str, port: int, payload: str) -> str:
for res in socket.getaddrinfo(address, port, socket.AF_UNSPEC,
socket.SOCK_DGRAM, 0, socket.AI_PASSIVE):
family_addr, _, _, _, addr = res
try:
sock = socket.socket(family_addr, socket.SOCK_DGRAM)
sock.settimeout(20.0)
except socket.error as msg:
print('Could not create socket')
print(os.strerror(msg.errno))
raise
try:
sock.sendto(payload.encode(), addr)
reply, addr = sock.recvfrom(128)
if not reply:
return ''
print('Reply[' + addr[0] + ':' + str(addr[1]) + '] - ' + str(reply))
except socket.timeout:
print('Socket operation timeout')
return ''
except socket.error as msg:
print('Error while sending or receiving data from the socket')
print(os.strerror(msg.errno))
sock.close()
raise
return reply.decode()
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument('remote_ip', help='UDP server ip address, eg: 192.168.1.1, fe80::2%%eth0')
parser.add_argument('--port', default=DEF_PORT, type=int, help='UDP server port')
parser.add_argument('--message', default=DEF_MESSAGE, help='Message to send to the server.')
args = parser.parse_args()
print(f'Send message to the server: {args.remote_ip}')
data = udp_client(args.remote_ip, args.port, args.message)
print(f'Received From server: {data}')
if __name__ == '__main__':
main()