Advertisement
Amenezes

socket server.py

Jan 17th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.16 KB | None | 0 0
  1. import socket
  2. import select
  3.  
  4. HEADER_LENGTH = 10
  5. IP = "127.0.0.1"
  6. PORT = 1234
  7.  
  8. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9. server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  10.  
  11. server_socket.bind((IP, PORT))
  12.  
  13. server_socket.listen()
  14.  
  15. sockets_list = [server_socket]
  16.  
  17. clients = {}
  18.  
  19. print(f'Listening for connections on {IP}:{PORT}...')
  20. def recieve_messages(client_socket):
  21.     try:
  22.         message_header = client_socket.recv(HEADER_LENGTH)
  23.  
  24.         if not len(message_header):
  25.             return False
  26.  
  27.         message_length = int(message_header.decode('utf-8').strip())
  28.         return {"header": message_header, "data": client_socket.recv(message_length)}
  29.  
  30.     except:
  31.         return False
  32.  
  33. while True:
  34.     read_sockets, _, exception_sockets = select.select(sockets_list, [], sockets_list)
  35.  
  36.     for notified_socket in read_sockets:
  37.         if notified_socket == server_socket:
  38.             client_socket, client_address = server_socket.accept()
  39.  
  40.             user = recieve_messages(client_socket)
  41.             if user is False:
  42.                 continue
  43.  
  44.             sockets_list.append(client_socket)
  45.  
  46.             clients[client_socket] = user
  47.  
  48.             print('Accepted new connection from {}:{}, username: {}'.format(client_address[0], client_address[1], user["data"].decode("utf-8")))
  49.         else:
  50.             message = recieve_messages(notified_socket)
  51.  
  52.             if message is False:
  53.                 print(f'Closed connection from {clients[notified_socket]["data"].decode("utf-8")}')
  54.                 sockets_list.remove(notified_socket)
  55.                 del clients[notified_socket]
  56.                 continue
  57.  
  58.             user = clients[notified_socket]
  59.             print(f'Recieved message from {user["data"].decode("utf-8")}: {message["data"].decode("utf-8")}')
  60.  
  61.             for client_socket in clients:
  62.                 if client_socket != notified_socket:
  63.                     client_socket.send(user['header'] + user['data'] + message['header'] + message['data'])
  64.  
  65.         for notified_socket in exception_sockets:
  66.             sockets_list.remove(notified_socket)
  67.             del clients[notified_socket]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement