socket和threading的智能问答机器人服务器与客户端(python)
智能问答机器人服务器与客户端
socket用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。
服务端套接字函数
server.bind() 绑定(主机,端口号)到套接字
server.listen() 开始TCP监听
server.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来。
server.close() 关闭服务器。
connect.close() 关闭链接
客户端
client.connect(ip地址,端口号) 连接服务器
Python通过两个标准库 _thread和 threading提供对线程的支持:
_thread:提供了低级别的、原始的线程以及简单的锁
threading:用于提供线程的相关操作,线程是应用程序中工作的最小单元。
threading模块提供的类:
Thread, Lock, Rlock, Condition,local等
threading 模块提供的其他方法:
threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,len(threading.enumerate())有相同的结果。
除了使用方法外,线程模块threading同样提供了threading.Thread类来处理线程,提供了以下方法(主要):
run():用以表示线程的活动方法
start():用于启动线程的活动
join([time]):等待至线程终止,阻塞线程调用直至线程的join()方法被调用终止、正常退出或者抛出未处理的异常、可选的超时异常的发生
isAlive():返回线程是否是活动的
getName():返回线程名
setName():设置线程名
服务器端
具体代码如下:
import socket
import threading
#问题库
questionDict={'苹果':'水果','猪':'是一种动物','狗':'是人类的好朋友','你好':'你好','我爱你':'我也爱你','猫':'爱吃老鼠','香蕉':'是一种水果','你叫什么名字':'小李','你吃饭了吗':'没有,肚子好饿','去吃饭吧':'好的','再见':'拜拜'}
#智能问答机器人服务器
class RobotServer():def __init__(self,ip='127.0.0.1',port=8080,connectSize=100):'''port:服务器的端口号connectSize:默认的并发数量'''self.__ip = ipself.__port = portself.__connectSize=connectSizepassdef startServer(self):#服务器启动的主程序server=socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 套接字类型AF_INET, socket.SOCK_STREAM tcp协议,基于流式的协议server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 对socket的配置重用ip和端口号server.bind((self.__ip,self.__port)) #绑定端口号,写哪个ip就要运行在哪台机器上server.listen(self.__connectSize) #设置半连接池,最多可以连接多少个客户端while True:clientConn,clientAddr = server.accept() # 在这个位置进行等待,监听端口号#定义独立线程,处理每个请求wt=WorkThread(clientConn,clientAddr)wt.start()passclass WorkThread(threading.Thread):def __init__(self,connection,addr,bufferSize = 8096):threading.Thread.__init__(self)self.__connection=connectionself.__addr = addrself.__bufferSize = bufferSizedef run(self):receiveMsg=self.__connection.recv(self.__bufferSize) # 接受套接字的大小,怎么发就怎么收receiveMsg = receiveMsg.decode('utf-8')answer = ""for temp in questionDict.keys():if temp.count(receiveMsg) >0:answer = questionDict[temp]breakif not answer:print("你在说啥?")self.__connection.send(answer.encode("utf-8"))self.__connection.close() # 断开连接pass
if __name__=="__main__":rs=RobotServer()rs.startServer()
客户端
具体代码如下:
from socket import *class RobotClient():def __init__(self,ip='127.0.0.1',port=8080,bufferSize=8096):self.__ip = ipself.__port = portself.__bufferSize=bufferSizepassdef startSendMsg(self,msg):client = socket(AF_INET,SOCK_STREAM) # 套接字类型AF_INET, socket.SOCK_STREAM tcp协议,基于流式的协议client.connect((self.__ip,self.__port)) #连接ip地址以及port端口client.send(msg.encode('utf-8')) # 收发消息一定要二进制,指定编码格式receive = client.recv(self.__bufferSize) # 接受套接字的大小print(receive.decode('utf-8'))client.close()pass
if __name__=="__main__":rs=RobotClient()while True:msg=input("你来说我来答:")rs.startSendMsg(msg)if msg == "再见": #如果输入 再见,则退出break
如有纰漏,请多指教
socket和threading的智能问答机器人服务器与客户端(python)相关推荐
- Android之智能问答机器人
本文主要利用图灵机器人的接口,所做的一个简单的智能问答机器人 实现 由于发送与接收消息都是不同的listView,所以要用有两个listVeiw的布局文件 接收消息布局文件 <?xml vers ...
- 实现一个微信公众号智能问答机器人
前言 实现一个微信公众号智能问答机器人.(注:该项目开发并不复杂,但是需要的前提条件较多,需要有一定经验的开发人员才能吃透这篇文章) 1. 前期准备 注册一个微信公众号(如果没有可以用微信官方测试的公 ...
- python知识点智能问答_基于知识图谱的智能问答机器人
研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式,是人工智能研究的一个分支. 知识图谱本质上是一种语义网络,其结点代表实体(entity)或者概念(concept),边代表实体 ...
- 基于知识图谱的智能问答机器人
研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式,是人工智能研究的一个分支. 知识图谱本质上是一种语义网络,其结点代表实体(entity)或者概念(concept),边代表实体 ...
- 如何使用智能问答机器人服务
以某企业的IT呼叫中心为例,此呼叫中心每天都要为企业内部员工解答大量的IT问题,其中包括大量重复回答的问题.为了降低运维成本,该呼叫中心开始使用华为云CBS智能问答机器人来问答IT问题. 本文介绍了购 ...
- 开发一个智能问答机器人
近期开发了一套基于自然语言处理的问答机器人,之前没有做过python,主要做asp.net,写这篇目的是给想要开发这类智能客服系统的朋友提供一个思路,项目已经上线,但在开发和设计过程中仍然有很多问题没 ...
- botpress搭建智能问答机器人
botpress搭建智能问答机器人 一.下载botpress源码 访问:https://github.com/botpress/botpress,下载最新的botpress源码 二.本地安装依赖 执行 ...
- 深度学习之智能问答机器人实战
深度学习之智能问答机器人实战 class1 对话类型 基于知识库问答 录入问题和答案 设计标准问题的相似问题 使用搜索和排序,根据相似度返回结果 基于规则脚本 以一定的语法定义规则 常用正则表达式等约 ...
- 七月Z星月度速览 | Milvus 源码解析重磅来袭、学术直播间开播、Milvus 社区在线答疑会重启、智能问答机器人上线……...
#July Z星月度速览 · 小 Mil 来了!Milvus 智能问答机器人上线 · Zilliz 合伙人.工程总监栾小凡与社区分享首期 Milvus 底层源码架构解析 · Milvus 社区发起首期 ...
最新文章
- LeetCode简单题之删除字符使字符串变好
- menudiv.php,在div PHP之外返回的短代码函数
- __dopostback的用法
- boc android app,BOC
- java宋江,Java编程内功-数据结构与算法「单链表」,
- selenium之批量执行测试用例
- 7-81 编程团体赛 (20 分)
- python语法报错_Python语法的常见错误和处理异常
- AI 崛起?科技公司却偷偷用人类做机器人的工作!
- 16 岁赚到 20 万美元,我的编程之路始于对代码的热爱
- 双人贪吃蛇java 代码_java 双人贪吃蛇
- 干货:8266在3d打印机上的使用
- 计算机接口图形,图形设备接口
- The signing key‘s size is 1024 bits which is not secure enough for the RS256 algorithm.
- 工业手持PDA,你不得不知的重要性
- Java从输入中读取一个数组
- Dobbo的继任者?试用微博RPC框架Motan
- 百度地图添加自定义点标记、文本标注、点标记
- 油猴脚本——掘金Markdown格式适配器知识点记录【油猴脚本、Markdown、浏览器文件读取、tooltip、SVG、、模拟用户输入、aria-xxxx属性、剪切板操作、】
- 无聊科技正经事(第7期):跟村上春树学跑步,向古川武士学养成