def CreateServer(self): listen_sock = tincanchat.create_listen_socket(HOST, PORT) addr = listen_sock.getsockname() print("Listening on {}".format(addr)) listen_thread = threading.Thread(target=self.handle_Server_Listen, args=[listen_sock], daemon=True) listen_thread.start()
def create_client(sock): '''Return an object representing a client''' return SimpleNamespace(sock=sock, rest=bytes(), send_queue=deque()) def broadcast_msg(msg): '''Add message to all connected clients' queues''' data = tincanchat.prep_msg(msg) for client in clients.values(): client.send_queue.append(data) poll.register(client.sock, select.POLLOUT) if __name__ == '__main__': listen_sock = tincanchat.create_listen_socket(HOST, PORT) poll = select.poll() poll.register(listen_sock, select.POLLIN) addr = listen_sock.getsockname() print("Listening on {}".format(addr)) # This is the event loop. Loop indefinitely, processing eveents # on all sockets when they occur while True: # Iterate over all socket with events for fd, event in poll.poll(): if event & (select.POLLHUP | select.POLLERR | select.POLLNVAL): poll.unregister(fd) del clients[fd]
import tincanchat HOST = tincanchat.HOST PORT = tincanchat.PORT def handle_client(sock, addr): """ Receive data from the client via sock and echo it back """ try: msg = tincanchat.recv_msg(sock) # Blocks until received # complete message print('{}: {}'.format(addr, msg)) tincanchat.send_msg(sock, msg) # Blocks until sent except (ConnectionError, BrokenPipeError): print('Socket error') finally: print('Closed connection to {}'.format(addr)) sock.close() if __name__ == '__main__': listen_sock = tincanchat.create_listen_socket(HOST, PORT) addr = listen_sock.getsockname() print('Listening on {}'.format(addr)) while True: client_sock,addr = listen_sock.accept() print('Connection from {}'.format(addr)) handle_client(client_sock, addr)
import threading import tincanchat host = tincanchat.host port = tincanchat.port def handle_client(sock, addr): """ Receive one msg and echo it back to client, then close socket""" try: msg = tincanchat.recv_msg(sock) msg = '{}: {}'.format(addr, msg) print(msg) tincanchat.send_msg(sock, msg) except (ConnectionError, BrokenPipeError): print('Socket error') finally: print('Closed connection to {}'.format(addr)) sock.close() if __name__ == '__main__': listen_sock = tincanchat.create_listen_socket(host, port) addr = listen_sock.getsockname() print('Listening on {}'.format(addr)) while True: client_sock,addr = listen_sock.accept() thread = threading.Thread(target=handle_client, args=[client_sock, addr], daemon=True) thread.start() print('Connection from {}'.format(addr))