服务端:
上代码
# -*-coding:utf-8-*-
#!/usr/bin/python
import os
import time
import socket
import threading
import queue
class alldata():
d = queue.Queue()
def __init___(self):
pass
global qWork
qWork = alldata()
class fuwu(threading.Thread):
def __init__(self):
self.socSer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.socSer.bind(("127.0.0.1",12345))
self.socSer.listen(5)
time.sleep(3)
self.conn,self.addr = self.socSer.accept()
self.recv = threading.Thread(target= self.rcv)
self.recv.start()
self.sen = threading.Thread(target= self.send)
self.sen.start()
def rcv(self):
# conn,addr = self.socSer.accept()
print(self.addr)
while True:
try:
data =self.conn.recv( 1024 )
if(data != None):
bs = str(data, encoding = "utf8") # 转化为str
bs = bytes.decode(data)
qWork.d.put(bs)
print("server 收到数据:"+bs)
# print(qWork.d.empty())
except IOError:
print(IOError)
self.conn.close()
def send(self):
while True:
while not qWork.d.empty():
try:
sendate = qWork.d.get()
sendate = sendate + "?"
self.conn.send(sendate.encode()) #转化为b发送
print("send success!")
except:
print("error send!")
fu = fuwu()
客户端:
上代码
# -*-coding:utf-8-*-
#!/usr/bin/python
import os
import time
import socket
import threading
import queue
class alldata():
d = queue.Queue()
def __init___(self):
pass
global qWork
qWork = alldata()
class fuwu(threading.Thread):
def __init__(self):
self.client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.client.connect(('127.0.0.1',12345))
self.recv = threading.Thread(target= self.rcv)
self.recv.start()
self.sen = threading.Thread(target= self.send)
self.sen.start()
def rcv(self):
while True:
try:
data =self.client.recv( 1024 )
if(data != None):
bs = str(data, encoding = "utf8") # ת»¯Ϊstr
bs = bytes.decode(data)
qWork.d.put(bs)
print("client 收到数据:" +bs)
# print(qWork.d.empty())
except IOError:
print(IOError)
self.client.close()
def send(self):
while True:
# while not qWork.d.empty():
try:
# qWork.d.get()
# print(qWork.d.empty())
s = input("put your str : \n")
self.client.send(s.encode()) #ת»¯Ϊb·¢ˍ
# print("send cg!")
except:
print("error send!")
fu = fuwu()
效果图:
服务端加上语音助手
上代码
# -*-coding:utf-8-*-
#!/usr/bin/python
import os
import time
import socket
import threading
import queue
import random
# global d,flag
# d = queue()
class alldata():
d = queue.Queue()
def __init___(self):
# self.d = queue.Queue()
pass
def put(self, QSocCor):
self.d.put(QSocCor)
def get(self):
return self.d.get()
def empty(self):
return self.d.empty()
global qWork
qWork = alldata()
class fuwu(threading.Thread):
def __init__(self):
self.socSer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.socSer.bind(("127.0.0.1",12345))
self.socSer.listen(5)
time.sleep(3)
self.conn,self.addr = self.socSer.accept()
self.recv = threading.Thread(target= self.rcv)
self.recv.start()
self.sen = threading.Thread(target= self.send)
self.sen.start()
def rcv(self):
# conn,addr = self.socSer.accept()
print(self.addr)
while True:
try:
data =self.conn.recv( 1024 )
if(data != None):
bs = str(data, encoding = "utf8") # 转化为str
bs = bytes.decode(data)
qWork.d.put(bs)
print("server "+bs)
# print(qWork.d.empty())
except IOError:
print(IOError)
self.conn.close()
def send(self):
while True:
while not qWork.d.empty():
try:
sendate = qWork.d.get()
data = open('./key.txt','r',encoding="utf-8")
list = []
while True:
line = data.readline()
if not line:
break
if(sendate in line ):
line = data.readline()
list.append(line)
line = data.readline()
else:
line = data.readline()
line = data.readline()
if(len(list)!=0):
flag = random.randint(0,len(list))
zr = "who are you?"
if (sendate in zr):
sendate = "我是张多阔的小助手!"
self.conn.send(sendate.encode())
elif(len(list)!= 0 ):
sendate = list[flag]
self.conn.send(sendate.encode()) #转化为b发送
else:
sendate = "我不知道你在说什么"
self.conn.send(sendate.encode())
print("send success!")
except:
print("error send!")
fu = fuwu()
效果
上面既然把语音助手都加上啦,那顺便也把智能家居也给加上吧
利用配置文件来增加终端设备
设备id可以在http://kjjt.asia上直接注册获取代码烧录到esp8266上,网站返回的密码即是设备id,用户名是zdk,密码是123456
服务端代码更改为:
# -*-coding:utf-8-*-
#!/usr/bin/python
import os
import time
import socket
import threading
import queue
import random
import configparser
import re
import requests
# global d,flag
# d = queue()
class alldata():
d = queue.Queue()
def __init___(self):
# self.d = queue.Queue()
pass
def put(self, QSocCor):
self.d.put(QSocCor)
def get(self):
return self.d.get()
def empty(self):
return self.d.empty()
global qWork
qWork = alldata()
class fuwu(threading.Thread):
def __init__(self):
self.pattern = re.compile(u'开.*?灯')
self.patternstop = re.compile(u'关.*?灯')
self.led = configparser.ConfigParser()
self.led.read("./my.ini",encoding="utf8")
self.socSer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.socSer.bind(("127.0.0.1",12345))
self.socSer.listen(5)
time.sleep(3)
self.conn,self.addr = self.socSer.accept()
self.recv = threading.Thread(target= self.rcv)
self.recv.start()
self.sen = threading.Thread(target= self.send)
self.sen.start()
def rcv(self):
# conn,addr = self.socSer.accept()
print(self.addr)
while True:
try:
data =self.conn.recv( 1024 )
if(data != None):
bs = str(data, encoding = "utf8") # 转化为str
bs = bytes.decode(data)
qWork.d.put(bs)
print("server "+bs)
# print(qWork.d.empty())
except IOError:
print(IOError)
self.conn.close()
def send(self):
while True:
while not qWork.d.empty():
try:
sendate = qWork.d.get()
ledata = sendate
ledlist = self.led.options("ledid")
if(self.pattern.search(ledata)):
# ledata = sendate[sendate.rfind('开'):]
ledata = self.pattern.search(ledata).group()
print(ledata)
if ledata in ledlist:
ledflag = self.led.get("ledid",ledata)
url = "http://kjjt.asia/demoled26.php?ip=47.95.12.58&keyword=1&topic="+ledflag
res = requests.get(url)
# http://kjjt.asia/demoled26.php?ip=47.95.12.58&topic=adminled28&keyword=1
sendate = "ok!"
self.conn.send(sendate.encode())
elif(self.patternstop.search(ledata)):
ledata = self.patternstop.search(ledata).group()
if ledata in ledlist:
ledflag = self.led.get("ledid",ledata)
url = "http://kjjt.asia/demoled26.php?ip=47.95.12.58&keyword=1&topic="+ledflag
res = requests.get(url)
sendate = "ok!"
self.conn.send(sendate.encode())
else:
data = open('./key.txt','r',encoding="utf-8")
list = []
while True:
line = data.readline()
if not line:
break
if(sendate in line ):
line = data.readline()
list.append(line)
line = data.readline()
else:
line = data.readline()
line = data.readline()
if(len(list)!=0):
flag = random.randint(0,len(list))
zr = "who are you?"
if (sendate in zr):
sendate = "我是张多阔的小助手!"
self.conn.send(sendate.encode())
elif(len(list)!= 0 ):
sendate = list[flag]
self.conn.send(sendate.encode()) #转化为b发送
else:
sendate = "我不知道你在说什么"
self.conn.send(sendate.encode())
print("send success!")
except:
print("error send!")
fu = fuwu()
于是就实现了