用python实现的一个自动聊天的机器人

来源:互联网 发布:4g网络哪家快 编辑:程序博客网 时间:2024/05/16 08:54
import socketimport timeimport tkinterfrom tkinter.scrolledtext import ScrolledTextimport threadingimport requestsimport tkinterfrom socket import *from time import ctimefrom tkinter import *
import socketimport timeimport tkinterfrom tkinter.scrolledtext import ScrolledTextimport threadingimport requestsimport tkinterfrom socket import *from time import ctimefrom tkinter import *global cs,Text_Show,Send_Show#发送按键的函数def Click_Send():    sendData=Send_Show.get() #获取输入内容    if sendData == 'quit':        Text_Show.insert(tkinter.END,"与服务器连接已断开"+"\n")        Text_Show.see(tkinter.END)        cs.sendall(bytes(sendData, encoding="utf8"))        cs.close()    else:        Text_Show.insert(tkinter.END,"客户端:"+sendData+"\n")        Text_Show.see(tkinter.END)        cs.sendall(bytes(sendData, encoding="utf8"))    Send_Show.delete(0,END)#线程函数,循环接受客户端消息def Receive_Data():    while True:        accept_data = str(cs.recv(1024), encoding="utf8")        Text_Show.insert(tkinter.END,"服务器:"+accept_data+"\n")        Text_Show.see(tkinter.END)#主函数if __name__ == "__main__":    #初始化GUI    root=tkinter.Tk()    root.title("聊天小程序客户端 ")    #顶部显示部分    frame1=Frame(root)    frame1.pack()    IP_Show_Label=Label(frame1,text="本程序默认IP:127.0.0.1\n默认端口为6000\n无法更改!!!")    IP_Show_Label.pack(side='left')    #中部聊天框显示部分    frame2=Frame(root)    frame2.pack()    Text_Show=ScrolledText(frame2,width=70,height=15)    Text_Show.bind("<KeyPress>",lambda e:"break")    Text_Show.pack(side="bottom",fill = 'both', expand = True)    #底部消息发送部分    frame3=Frame(root)    frame3.pack()    e3=StringVar()    Send_Show=Entry(frame3, textvariable=e3,width=60)    buttontext2 = tkinter.StringVar()    buttontext2.set('发送')    button_Send = tkinter.Button(frame3,width=10, textvariable=buttontext2,command=Click_Send )    Send_Show.pack(side="left")    button_Send.pack(side="left")    frame3.pack()    #初始化TCP协议    HOST='127.0.0.1'    PORT=4700    BUFSIZ=1024    ADDR=(HOST,PORT)    cs=socket(AF_INET,SOCK_STREAM,0)    cs.connect(ADDR)    thread=threading.Thread(target=Receive_Data)    thread.start()    root.mainloop() 

global Text_Show#调用人工智能对话的函数,返回人工智能回答def AI_Talk(s): response = requests.post("http://www.tuling123.com/openapi/api", data={ "key": "5636c0854e88430383a861151bf764ca", "info": s, "userid": "123456" }) response = response.json() answer=response['text'] return answer#线程二函数,用来进行对话def Sever_Thread(sock,caddr): Text_Show.insert('end',"客户端@"+str(caddr[1])+"已连接!\n") while True: # 接收数据 data = str(sock.recv(1024).decode('UTF-8')) if data == "quit": Text_Show.insert('end',"客户端@"+str(caddr[1])+"终止了对话\n") Text_Show.see(tkinter.END) break else: Text_Show.insert('end',"来自客户端@"+str(caddr[1])+"的消息为:"+data+'\n') Text_Show.see(tkinter.END) #发送数据 time.sleep(0.2) data=AI_Talk(data) #data = '请输入发送至客户端的数据: 123123' #如果要手动输入的话就要设置好线程sleep时间不然还没有输入,就已经到其他线程了,就会发不出去。 sock.sendall(bytes(data, 'UTF-8')) sock.close()#线程一函数,监听端口,一旦有客户端接入,开启线程二def Sever_Accept(ss): while True: sock,caddr=ss.accept() Thread2 = threading.Thread(target=Sever_Thread, args=(sock,caddr)) Thread2.daemon=True #线程守护 Thread2.start()#服务器初始化def Sever_Init(): HOST = '' PORT = 4700 ADDR = (HOST, PORT) ss = socket(AF_INET, SOCK_STREAM, 0) ss.bind(ADDR) ss.listen(20) #允许最大监听数 Thread1=threading.Thread(target=Sever_Accept,args=(ss,)) Thread1.daemon=True #线程守护 Thread1.start()#主函数if __name__ == "__main__": root=tkinter.Tk() root.title("聊天小程序服务器端 ") frame1=Frame(root) frame1.pack() IP_Show_Label=Label(frame1,text="默认IP:127.0.0.1\n默认端口为6000\n无法更改!!!") IP_Show_Label.pack(side='left') frame2=Frame(root) frame2.pack() Text_Show=ScrolledText(frame2,width=100,height=30) Text_Show.bind("<KeyPress>",lambda e:"break") Text_Show.pack(side="bottom",fill = 'both', expand = True) Sever_Init() root.mainloop()
 
阅读全文
0 0
原创粉丝点击