fork download
  1. import socket
  2. import threading
  3.  
  4. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5.  
  6. sock.bind(('localhost', 5550))
  7.  
  8. sock.listen(5)
  9. print('Server', socket.gethostbyname('localhost'), 'listening ...')
  10.  
  11. mydict = dict()
  12. mylist = list()
  13.  
  14. def tellOthers(exceptNum, whatToSay):
  15. for c in mylist:
  16. if c.fileno() != exceptNum :
  17. try:
  18. c.send(whatToSay.encode())
  19. except:
  20. pass
  21.  
  22. def subThreadIn(myconnection, connNumber):
  23. #nickname = myconnection.recv(1024).decode()
  24. #mydict[myconnection.fileno()] = nickname
  25. mylist.append(myconnection)
  26. #print('connection', connNumber, ' has nickname :', nickname)
  27. #tellOthers(connNumber, '【系統提示:'+mydict[connNumber]+' 進入】')
  28. while True:
  29. try:
  30. recvedMsg = myconnection.recv(1024).decode()
  31. if recvedMsg:
  32. print(recvedMsg)
  33. #tellOthers(connNumber, mydict[connNumber]+' :'+recvedMsg)
  34. sock.send('quit'.encode())
  35. except (OSError, ConnectionResetError):
  36. try:
  37. mylist.remove(myconnection)
  38. except:
  39. pass
  40. print('Client left')
  41. #tellOthers(connNumber, '【系統提示:'+mydict[connNumber]+' 離開】')
  42. myconnection.close()
  43. return
  44.  
  45. while True:
  46. connection, addr = sock.accept()
  47. print('Accept a new connection', connection.getsockname(), connection.fileno())
  48. try:
  49. #connection.settimeout(5)
  50. buf = connection.recv(1024).decode()
  51. if buf:
  52. connection.send(b'welcome to server!')
  53.  
  54. #為當前連結開啟一個新的執行緒
  55. mythread = threading.Thread(target=subThreadIn, args=(connection, connection.fileno()))
  56. mythread.setDaemon(True)
  57. mythread.start()
  58.  
  59. else:
  60. connection.send(b'please go out!')
  61. connection.close()
  62. except :
  63. pass
Time limit exceeded #stdin #stdout 5s 31072KB
stdin
Standard input is empty
stdout
Standard output is empty