import socket def create_tcp_socket(address): tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) tcp_socket.bind(address) tcp_socket.listen(1) return tcp_socket def recv_until(sock, delimiter): message = b`` while not message.endswith(delimiter): data = sock.recv(4096) if not data: break message += data return message def listen(tcp_socket, nr_thread=1): while True: sock, address = tcp_socket.accept() print(`Accepted connection from {}`.format(address)) print(`Listen on ` + str(nr_thread) + ` thread!`) try: while True: question = recv_until(sock, b`?`) if len(question) > 0: print(`Client at {}`.format(address) + ` said: `, end=` `) print(question.decode()) answer = b``.join([b`You sent `, bytes(str(len(question)), `utf8`), b` bytes!`]) sock.sendall(answer) else: break sock.close() except EOFError: print(`Client socket to {} has closed`.format(address)) finally: sock.close() def server(address): tcp_socket = create_tcp_socket(address) listen(tcp_socket) import sys import server from threading import Thread def parse_args(): host = sys.argv[1] port = int(sys.argv[2]) nr_threads = int(sys.argv[3]) return ((host, port), nr_threads) def create_threads(tcp_socket, nr_threads): for i in range(nr_threads): thread_arg = (tcp_socket, i,) Thread(target=server.listen, args=thread_arg).start() if name == `main`: args = parse_args() address = args[0] nr_threads = args[1] tcp_socket = server.create_tcp_socket(address) create_threads(tcp_socket, nr_threads) MULTIKLIJENTI import client if name == `main`: address = (`127.0.0.1`, 1060) n = 100000 for i in range(n): client.client(address) KLIJENT KOJI Å ALJE PUNO def client(address, message_length): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(address) print(`Client has been assigned socket name`, sock.getsockname()) question = b`What clock is it` count = (message_length + 15) // 16 * 16 sent = 0 while sent < count: sock.sendall(question) sent += len(question) print(`Sent ` + str(sent) + ` by far!`) sock.shutdown(socket.SHUT_WR) reply = recv_until(sock, b`!`) print(`Server said: `, reply.decode()) sock.close()
©