socket_server.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # coding=utf-8
  2. #!/usr/bin/env python
  3. '''
  4. author:Mr.Jing
  5. created on Fri Sep 22 14:29:03 2017
  6. platfrom:win10,python2.7
  7. '''
  8. from socket import *
  9. from time import ctime
  10. import threading
  11. import time
  12. import json
  13. # 小服务器内网地址:172.24.159.211
  14. # 大服务器内网地址:172.16.220.3
  15. HOST = '172.16.220.3'
  16. PORT = 9999
  17. BUFSIZ = 1024
  18. ADDR = (HOST, PORT)
  19. #创建服务端的socket对象
  20. tcpSerSock = socket(AF_INET, SOCK_STREAM)
  21. #绑定地址(包括ip地址会端口号)
  22. tcpSerSock.bind(ADDR)
  23. #设置监听
  24. tcpSerSock.listen(5)
  25. socks = [] # 放每个客户端的socket
  26. def handle():
  27. while True:
  28. for s in socks:
  29. try:
  30. #接收客户端的请求
  31. data = s['client'].recv(BUFSIZ).decode()
  32. except:
  33. continue
  34. if not data:
  35. socks.remove(s)
  36. continue
  37. print("addr:%s;data:%s" % (s['addr'],data))
  38. # print("type(data):",type(data))#str
  39. # print("type(json.loads(data)):",type(json.loads(data)))#dict
  40. # print("client_id:",json.loads(data)['client_id'])
  41. # s.send('[%s],%s' % (ctime(), data).encode()) # 加上时间戳返回
  42. # s['client'].send("data is upload success!".encode()) #对要发送的数据进行编码
  43. socks[0]['client'].send(data.encode()) #对要发送的数据进行编码
  44. # 服务器消息下发队列:
  45. # cmds = []
  46. # # 服务器下发:
  47. # def downsend():
  48. # while True:
  49. # while len(cmds) != 0:
  50. # for c in cmds:
  51. # try:
  52. # data = s['client'].recv(BUFSIZ).decode()
  53. # except:
  54. # continue
  55. # if not data:
  56. # socks.remove(s)
  57. # continue
  58. # print("addr:%s;data:%s" % (s['addr'],data))
  59. # # s.send('[%s],%s' % (ctime(), data).encode()) # 加上时间戳返回
  60. # s['client'].send("data is upload success!".encode()) # 加上时间戳返回
  61. t = threading.Thread(target=handle) # 子线程1:个人理解是接收中断回调的意思
  62. # t2 = threading.Thread(target=downsend) # 子线程2:用于循环遍历队列;查看是否有数据下发;
  63. if __name__ == '__main__':
  64. t.start()
  65. # t2.start()
  66. print('this is %s线程中 ' % threading.current_thread().name) # 本身是主线程
  67. print('waiting for connecting...')
  68. while True:
  69. client = {}
  70. #注意:accept()函数会返回一个元组
  71. #元素1为客户端的socket对象,元素2为客户端的地址(ip地址,端口号)
  72. clientSock, addr=tcpSerSock.accept()
  73. print('connected from:', addr)
  74. clientSock.send("connect is ok!".encode())
  75. client['client'] = clientSock
  76. client['addr'] = addr
  77. clientSock.setblocking(0)
  78. socks.append(client)
  79. print("socks:",socks)