-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathserver.py
50 lines (41 loc) · 1.67 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import argparse
import socket
import threading
parser = argparse.ArgumentParser(
description = 'Networks Project: Experiment on Different Congestion Control Protocol')
parser.add_argument('-bs', '--buffer-size', default = 64, type=int, help='Buffer size (KB)')
parser.add_argument('-p', '--protocol', default='cubic', choices=['cubic', 'pcc', 'bbr'],
help='Congestion control protocol')
parser.add_argument('-ip', '--ip', default='127.0.0.1', help='Host IP address')
def communicate(server, conn):
data = 'start'
try:
while data:
data = conn.recv(1024*2)
#print("Received: {}...".format(data[:min(16,len(data))]))
data = data.upper()
#print("Sending: {}...".format(data[:min(16,len(data))]))
conn.send(data)
print("Close")
server.close()
except:
server.close()
print('Closed for exception')
def main():
args = parser.parse_args()
server = socket.socket()
TCP_CONGESTION = getattr(socket, 'TCP_CONGESTION', 13)
server.setsockopt(socket.IPPROTO_TCP, TCP_CONGESTION, args.protocol.encode())
server.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024 * args.buffer_size)
server.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024 * args.buffer_size)
port = 9999
server.bind((args.ip, port))
server.listen(50)
print("Waiting for connections...")
while True:
conn, addr = server.accept()
print("Connected: {}".format(addr))
thread = threading.Thread(target=communicate, args=(server,conn))
thread.start()
if __name__ == '__main__':
main()