| 86 | |
| 87 | |
| 88 | class UDPSender: |
| 89 | def __init__(self, host, port): |
| 90 | self.addr = (host, port) |
| 91 | self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
| 92 | self.chunk_size = 8_192 |
| 93 | |
| 94 | def send(self, data: bytes): |
| 95 | """Send raw bytes, fragmenting if needed.""" |
| 96 | for offset in range(0, len(data), self.chunk_size): |
| 97 | self.sock.sendto(data[offset : offset + self.chunk_size], self.addr) |
| 98 | |
| 99 | def send_text(self, text: str): |
| 100 | self.sock.sendto(text.encode(), self.addr) |
| 101 | |
| 102 | def close(self): |
| 103 | self.sock.close() |
| 104 | |
| 105 | |
| 106 | # --------------------------------------------------------------------------- |