docker compose up
python udp_client.py IP_ADDRESS 31337
services: | |
traefik: | |
image: "traefik:v2.9.10" | |
command: | |
- --providers.docker | |
- --api.insecure=true | |
- --entryPoints.web.address=:80 | |
- --entryPoints.websecure.address=:443 | |
- --entryPoints.traefik.address=:8080 | |
- --entryPoints.streaming.address=:31337/udp | |
networks: | |
- net-traefik | |
ports: | |
- "80:80" | |
- "443:443" | |
- "31337:31337/udp" | |
- "8080:8080" | |
volumes: | |
- "/var/run/docker.sock:/var/run/docker.sock:ro" | |
labels: | |
- "traefik.docker.network=net-traefik" | |
whoami: | |
image: traefik/whoami | |
networks: | |
- "net-traefik" | |
labels: | |
- "traefik.enable=true" | |
- "traefik.docker.network=net-traefik" | |
streaming: | |
build: . | |
networks: | |
- net-traefik | |
labels: | |
- "traefik.enable=true" | |
- "traefik.docker.network=net-traefik" | |
- "traefik.udp.services.streaming.loadBalancer.server.port=31337" | |
- "traefik.udp.routers.streaming.entrypoints=streaming" | |
- "traefik.udp.routers.streaming.service=streaming" | |
networks: | |
net-traefik: | |
name: "net-traefik" |
FROM python:3 | |
WORKDIR /usr/src/app | |
COPY udp_server.py . | |
CMD [ "python", "./udp_server.py" ] |
import socket | |
import sys | |
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
server_address = sys.argv[1] | |
server_port = int(sys.argv[2]) | |
client_socket.connect((server_address, server_port)) | |
message = 'Hello World' | |
client_socket.send(message.encode()) | |
response = client_socket.recv(1024).decode() | |
print("Test passed" if message == response else "Test failed") |
import socket | |
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
server_address = '0.0.0.0' | |
server_port = 31337 | |
server = (server_address, server_port) | |
sock.bind(server) | |
print("Listening on ", server_address, ":", str(server_port), flush=True) | |
while True: | |
payload, client_address = sock.recvfrom(1000) | |
print("Echoing data back to ", str(client_address), ": ", payload) | |
sent = sock.sendto(payload, client_address) | |
print("Sent results: ", str(sent), flush=True) |