# coding=utf-8 #!/usr/bin/env python ''' author:Mr.Jing created on Fri Sep 22 14:29:03 2017 platfrom:win10,python2.7 ''' from socket import * from time import ctime import threading import time import json # 小服务器内网地址:172.24.159.211 # 大服务器内网地址:172.16.220.3 HOST = '172.16.220.3' PORT = 9999 BUFSIZ = 1024 ADDR = (HOST, PORT) #创建服务端的socket对象 tcpSerSock = socket(AF_INET, SOCK_STREAM) #绑定地址(包括ip地址会端口号) tcpSerSock.bind(ADDR) #设置监听 tcpSerSock.listen(5) socks = [] # 放每个客户端的socket def handle(): while True: for s in socks: try: #接收客户端的请求 data = s['client'].recv(BUFSIZ).decode() except: continue if not data: socks.remove(s) continue print("addr:%s;data:%s" % (s['addr'],data)) # print("type(data):",type(data))#str # print("type(json.loads(data)):",type(json.loads(data)))#dict # print("client_id:",json.loads(data)['client_id']) # s.send('[%s],%s' % (ctime(), data).encode()) # 加上时间戳返回 # s['client'].send("data is upload success!".encode()) #对要发送的数据进行编码 socks[0]['client'].send(data.encode()) #对要发送的数据进行编码 # 服务器消息下发队列: # cmds = [] # # 服务器下发: # def downsend(): # while True: # while len(cmds) != 0: # for c in cmds: # try: # data = s['client'].recv(BUFSIZ).decode() # except: # continue # if not data: # socks.remove(s) # continue # print("addr:%s;data:%s" % (s['addr'],data)) # # s.send('[%s],%s' % (ctime(), data).encode()) # 加上时间戳返回 # s['client'].send("data is upload success!".encode()) # 加上时间戳返回 t = threading.Thread(target=handle) # 子线程1:个人理解是接收中断回调的意思 # t2 = threading.Thread(target=downsend) # 子线程2:用于循环遍历队列;查看是否有数据下发; if __name__ == '__main__': t.start() # t2.start() print('this is %s线程中 ' % threading.current_thread().name) # 本身是主线程 print('waiting for connecting...') while True: client = {} #注意:accept()函数会返回一个元组 #元素1为客户端的socket对象,元素2为客户端的地址(ip地址,端口号) clientSock, addr=tcpSerSock.accept() print('connected from:', addr) clientSock.send("connect is ok!".encode()) client['client'] = clientSock client['addr'] = addr clientSock.setblocking(0) socks.append(client) print("socks:",socks)