Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. """
  2. clients array:
  3. 0 - Socket
  4. 1 - nickname
  5. 2 - active client or not (0 active , -1 disconnected)
  6. 3 - client ip
  7. """
  8.  
  9. from socket import * # sockets
  10. from threading import Thread # thread
  11. import sys
  12. import os
  13. #store information of the clients
  14. clients = []
  15. #store clients in a private chat
  16. privateChat = []
  17. #thread that receives inputs at the server terminal
  18. def listClients():
  19. while 1:
  20. somethin = raw_input('see list?\n')
  21. #list all available connections
  22. if somethin == "list()":
  23. if len(clients) !=0:
  24. for i in range(0, len(clients)):
  25. #checks which clients are connected
  26. if clients[i][2]==0:
  27. print "name: %s ip: %s port: 12000"%(clients[i][1],clients[i][3])
  28. else:
  29. print "no such clients logged"
  30.  
  31.  
  32. elif somethin == "close()":
  33. for i in range(0, len(clients)):
  34. if clients[i][2]==0:
  35. try:
  36. clients[i][0].send("close")
  37. except:
  38. print "Logged out client"
  39.  
  40. break
  41. serverSocket.close()
  42. os._exit(0)
  43. sys.exit("Finished Execution")
  44.  
  45. #parallely manage clients
  46. def clientManager(connectionSocket,t_id):
  47. #receive the nickname of the client
  48. good_name = "no"
  49. while good_name == "no":
  50. sentence = connectionSocket.recv(1024)
  51. good_name = "yes"
  52. for i in range(0, len(clients)):
  53. if sentence == clients[i][1]:
  54. good_name = "no"
  55. connectionSocket.send("Name already in use, choose another nickname:")
  56. break
  57.  
  58. clients[t_id][1] = sentence
  59. identification = "Cliente %s has logged in." % (sentence)
  60. print identification
  61. for i in range(0, len(clients)):
  62. if clients[i][2]==0:
  63. clients[i][0].send(identification)
  64. while 1:
  65. try:
  66. message = connectionSocket.recv(1024) #
  67. except:
  68. os._exit(0)
  69. serv_response = "[%s]: %s" % (clients[t_id][1],message)
  70. #store the id of who sent the message
  71. clientSender = t_id
  72. print serv_response
  73. #change nickname
  74. if "name(" in message:
  75. new_name = message.split('name(')
  76. new_name = new_name[1].split(')')
  77. new_name = new_name[0]
  78. good_name = "yes"
  79. for i in range(0, len(clients)):
  80. if new_name == clients[i][1]:
  81. good_name = "no"
  82. break
  83. if good_name == "no":
  84. clients[t_id][0].send("Name already in use, choose another nickname:")
  85. else:
  86. nick_change = "%s changed to: %s"%(clients[t_id][1],new_name)
  87. clients[t_id][1] = new_name
  88. print "New nick is: %s"%new_name
  89. for i in range(0, len(clients)):
  90. if clients[i][2]==0:
  91. clients[i][0].send(nick_change)
  92. #send list of connected users
  93. elif "/list" in message:
  94. for i in range(0, len(clients)):
  95. if clients[i][2]==0:
  96. send_list = "name: %s ip: %s port: 12000\n"%(clients[i][1],clients[i][3])
  97. clients[t_id][0].send(send_list)
  98.  
  99. else:
  100. if message == "/quit":
  101. clients[t_id][2]=-1
  102. serv_response = "Client %s left the room."%clients[t_id][1]
  103. print "Client %s left the room."%clients[t_id][1]
  104. for i in range(0, len(clients)):
  105. if clients[i][2]==0 and i!= clientSender:
  106. clients[i][0].send(serv_response)
  107. break
  108. for i in range(0, len(clients)):
  109. if clients[i][2]==0 and i!= clientSender:
  110. clients[i][0].send(serv_response)
  111.  
  112.  
  113.  
  114. connectionSocket.close()
  115.  
  116.  
  117. serverName = '' # server ip
  118. serverPort = 12000 # port to be connected
  119. global serverSocket
  120. serverSocket = socket(AF_INET,SOCK_STREAM) # TCP socket creation
  121. try:
  122. serverSocket.bind((serverName,serverPort)) # bind server ip with its port
  123. except:
  124. print "Port already in use"
  125. serverSocket.close()
  126. os._exit(0)
  127. t = Thread(target=listClients, args=())
  128. t.start()
  129. serverSocket.listen(1)
  130. print "TCP server waiting connections on port %d ..." % (serverPort)
  131. counter = 0
  132. while 1:
  133. #indicates if it was invited to a private chat
  134. flagInvP=0
  135. #inicializes who invited
  136. inviterID=0
  137. #inicializes who is in private chat
  138. inPrivateChat = 0
  139. try:
  140. connectionSocket, addr = serverSocket.accept()
  141. except:
  142. serverSocket.close()
  143. os._exit(0)
  144. clients.append([connectionSocket,0,0,addr,flagInvP,inviterID,inPrivateChat])
  145.  
  146. t = Thread(target=clientManager, args=(connectionSocket,counter,))
  147. t.start()
  148. counter += 1
  149. serverSocket.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement