57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
import socket
|
|
import select
|
|
|
|
IP = "0.0.0.0"
|
|
UDP_PORT = 5069
|
|
TCP_PORT = 6069
|
|
|
|
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
udp.bind((IP, UDP_PORT))
|
|
tcp.bind((IP, TCP_PORT))
|
|
tcp.listen(10)
|
|
|
|
tcpconns = {tcp}
|
|
|
|
|
|
def udp_data(udp: socket.socket) -> None:
|
|
(udp_incoming, _, _) = select.select([udp], [], [], 0)
|
|
if udp_incoming:
|
|
udp_data, udp_addr = udp.recvfrom(1024)
|
|
print("Received UDP data from %s with content %s" % (udp_addr, udp_data))
|
|
udp.sendto(udp_data, udp_addr)
|
|
|
|
|
|
def tcp_data(tcp: socket.socket) -> None:
|
|
(newsocks, _, _) = select.select(tcpconns, [], tcpconns, 0)
|
|
for sock in newsocks:
|
|
if sock is tcp:
|
|
conn, addr = tcp.accept()
|
|
conn.setblocking(False)
|
|
tcpconns.add(conn)
|
|
print("TCP connection from %s:%d" % addr)
|
|
print(len(tcpconns))
|
|
continue
|
|
try:
|
|
data = sock.recv(1024)
|
|
print("TCP Data: %s" % data)
|
|
sock.sendall(b"aarf")
|
|
except socket.timeout:
|
|
print("Connection closed by remote end")
|
|
tcpconns.remove(sock)
|
|
sock.close()
|
|
except ConnectionResetError:
|
|
print("Connection reset by peer")
|
|
tcpconns.remove(sock)
|
|
sock.close()
|
|
except BrokenPipeError:
|
|
print("Broken pipe")
|
|
tcpconns.remove(sock)
|
|
sock.close()
|
|
|
|
|
|
while True:
|
|
udp_data(udp)
|
|
tcp_data(tcp)
|