Advertisement
Guest User

Untitled

a guest
Jul 4th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. import socket, select
  2.  
  3.  
  4. def broadcast_data(sock, message):
  5. for socket in CONNECTION_LIST:
  6. if socket != server_socket and socket != sock:
  7. try:
  8. socket.send(message)
  9. except:
  10. # broken socket connection may be, chat client pressed ctrl+c for example
  11. socket.close()
  12. CONNECTION_LIST.remove(socket)
  13.  
  14.  
  15. def send_data_directly(sender_name, sendee_name, message):
  16. print(sendee_name)
  17. for socket, username in USERNAMES.items():
  18. if username == sendee_name:
  19. if socket != server_socket:
  20. socket.send('<PRIVATE from ' + sender_name + '> ' + message)
  21.  
  22.  
  23. if __name__ == "__main__":
  24.  
  25. # List to keep track of socket descriptors
  26. CONNECTION_LIST = []
  27. USERNAMES = {}
  28. RECV_BUFFER = 4096
  29. PORT = 5000
  30.  
  31. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  32. server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  33. server_socket.bind(("0.0.0.0", PORT))
  34. server_socket.listen(10)
  35.  
  36. # Add server socket to the list of readable connections
  37. CONNECTION_LIST.append(server_socket)
  38.  
  39. print "Chat server started on port " + str(PORT)
  40.  
  41. while 1:
  42. # Get the list sockets which are ready to be read through select
  43. read_sockets,write_sockets,error_sockets = select.select(CONNECTION_LIST,[],[])
  44.  
  45. for sock in read_sockets:
  46. #New connection
  47. if sock == server_socket:
  48. sockfd, addr = server_socket.accept()
  49. CONNECTION_LIST.append(sockfd)
  50. print "Client (%s, %s) connected" % addr
  51.  
  52.  
  53. #Some incoming message from a client
  54. else:
  55. try:
  56. data = sock.recv(RECV_BUFFER)
  57. if data:
  58. if data[0] == '#':
  59. USERNAMES[sock] = data[1:-1]
  60. broadcast_data(server_socket, "Greetings to " + USERNAMES[sock] + "\n")
  61. elif data[0] == '@':
  62. send_data_directly(USERNAMES[sock], data.split(' ')[0][1:], data.split(' ', 1)[1])
  63. else:
  64. broadcast_data(sock, "\r" + '<' + USERNAMES[sock] + '> ' + data)
  65. except:
  66. broadcast_data(sock, "Farewell to " + USERNAMES[sock] + "\n")
  67. print "Client (%s, %s) is offline" % addr
  68. sock.close()
  69. CONNECTION_LIST.remove(sock)
  70. continue
  71.  
  72. server_socket.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement