I tested your code, and it works as expected on my machine. Your issue might not be your code. It could be a firewall or something else blocking all the packets on the loopback interface (127.0.0.1). Depending on your operating system, try testing with a packet monitor like Wireshark.
Also, here are a few suggestions on how to improve your code to be more Pythonic:
Server
import random import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(('', 12000)) while True: rand = random.randint(0, 10) message, address = server_socket.recvfrom(1024) message = message.upper() if rand >= 4: server_socket.sendto(message, address)
Client
import time import socket for pings in range(10): client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client_socket.settimeout(1.0) message = b'test' addr = ("127.0.0.1", 12000) start = time.time() client_socket.sendto(message, addr) try: data, server = client_socket.recvfrom(1024) end = time.time() elapsed = end - start print(f'{data} {pings} {elapsed}') except socket.timeout: print('REQUEST TIMED OUT')