Advertisement
Guest User

Python Chat Server

a guest
Sep 3rd, 2015
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | None | 0 0
  1. #!/usr/bin/python           # This is server.py file
  2.  
  3. import socket               # Import socket module
  4. from thread import *
  5. import select
  6.  
  7. connection_list = []             # List to hold all connected clients
  8. address_list = []                # List to hold all client addresses
  9. RECV_BUFFER = 4096
  10. PORT = 1337
  11. HOST = "0.0.0.0"
  12.  
  13.  
  14. server_socket = socket.socket()         # Create a socket object
  15. server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
  16. server_socket.bind((HOST, PORT))        # Bind to the port
  17. server_socket.listen(10)                 # Now wait for client connection.
  18. server_socket.setblocking(False)
  19.  
  20. connection_list.append(server_socket)
  21. address_list.append(HOST)
  22.  
  23. print("Started chat server on port " + str(PORT))
  24.  
  25.  
  26. while True:
  27.     try:
  28.        read_sockets, write_sockets, error_sockets = select.select(connection_list,[],connection_list)
  29.    
  30.        for current_socket in read_sockets:
  31.  
  32.           if current_socket == server_socket:
  33.              client_socket, client_address = server_socket.accept()
  34.              connection_list.append(client_socket)
  35.              address_list.append(client_address)
  36.              print( "Client (%s, %s) connected" % client_address)
  37.              client_socket.send("Welcome to the server!\n")
  38.              client_socket.send("There are 0 users online\n")
  39.  
  40.           else:
  41.              try:
  42.                 data = current_socket.recv(RECV_BUFFER)
  43.                 current_socket_addr = address_list[connection_list.index(current_socket)]
  44.                 if data:
  45.                     for current_send_socket in connection_list:
  46.                        if current_send_socket != server_socket:
  47.                            current_send_socket.send("<"+current_socket_addr[0]+"> "+data)
  48.                            continue
  49.  
  50.                     print("<"+current_socket_addr[0]+"> "+data[:-1])
  51.                 else:
  52.                     print ("Client (%s, %s) has disconnected" % current_socket_addr)
  53.                     current_socket.close()
  54.                     connection_list.remove(current_socket)
  55.  
  56.          
  57.              except:
  58.                 current_socket_addr = address_list[connection_list.index(current_socket)]
  59.                 print ("Client (%s, %s) is offline" % current_socket_addr)
  60.                 current_socket.close()
  61.                 connection_list.remove(current_socket)
  62.                 continue
  63.                    
  64.  
  65.     except (KeyboardInterrupt, SystemExit):
  66.         print("Shutting down server...")
  67.         print("Disconnecting all clients...")
  68.         for current_client in connection_list:
  69.             if current_client != server_socket:
  70.                 current_client.send("[Server] Server shutting down... \n")
  71.                 current_client.close()
  72.  
  73.         print("Closing server socket...")
  74.         server_socket.shutdown(socket.SHUT_RDWR)
  75.         server_socket.close()        
  76.         print("Server shut down successfully")
  77.         raise
  78.    
  79.  
  80. server_socket.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement