| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- # 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)
|