run_udp_client.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: Unlicense OR CC0-1.0
  3. import argparse
  4. import os
  5. import socket
  6. DEF_PORT = 3333
  7. DEF_MESSAGE = 'Data to ESP'
  8. def udp_client(address: str, port: int, payload: str) -> str:
  9. for res in socket.getaddrinfo(address, port, socket.AF_UNSPEC,
  10. socket.SOCK_DGRAM, 0, socket.AI_PASSIVE):
  11. family_addr, _, _, _, addr = res
  12. try:
  13. sock = socket.socket(family_addr, socket.SOCK_DGRAM)
  14. sock.settimeout(20.0)
  15. except socket.error as msg:
  16. print('Could not create socket')
  17. print(os.strerror(msg.errno))
  18. raise
  19. try:
  20. sock.sendto(payload.encode(), addr)
  21. reply, addr = sock.recvfrom(128)
  22. if not reply:
  23. return ''
  24. print('Reply[' + addr[0] + ':' + str(addr[1]) + '] - ' + str(reply))
  25. except socket.timeout:
  26. print('Socket operation timeout')
  27. return ''
  28. except socket.error as msg:
  29. print('Error while sending or receiving data from the socket')
  30. print(os.strerror(msg.errno))
  31. sock.close()
  32. raise
  33. return reply.decode()
  34. def main() -> None:
  35. parser = argparse.ArgumentParser()
  36. parser.add_argument('remote_ip', help='UDP server ip address, eg: 192.168.1.1, fe80::2%%eth0')
  37. parser.add_argument('--port', default=DEF_PORT, type=int, help='UDP server port')
  38. parser.add_argument('--message', default=DEF_MESSAGE, help='Message to send to the server.')
  39. args = parser.parse_args()
  40. print(f'Send message to the server: {args.remote_ip}')
  41. data = udp_client(args.remote_ip, args.port, args.message)
  42. print(f'Received From server: {data}')
  43. if __name__ == '__main__':
  44. main()