First commit
This commit is contained in:
56
server.py
Normal file
56
server.py
Normal file
@@ -0,0 +1,56 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user