智能问答机器人服务器与客户端

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)相关推荐

  1. Android之智能问答机器人

    本文主要利用图灵机器人的接口,所做的一个简单的智能问答机器人 实现 由于发送与接收消息都是不同的listView,所以要用有两个listVeiw的布局文件 接收消息布局文件 <?xml vers ...

  2. 实现一个微信公众号智能问答机器人

    前言 实现一个微信公众号智能问答机器人.(注:该项目开发并不复杂,但是需要的前提条件较多,需要有一定经验的开发人员才能吃透这篇文章) 1. 前期准备 注册一个微信公众号(如果没有可以用微信官方测试的公 ...

  3. python知识点智能问答_基于知识图谱的智能问答机器人

    研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式,是人工智能研究的一个分支. 知识图谱本质上是一种语义网络,其结点代表实体(entity)或者概念(concept),边代表实体 ...

  4. 基于知识图谱的智能问答机器人

    研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式,是人工智能研究的一个分支. 知识图谱本质上是一种语义网络,其结点代表实体(entity)或者概念(concept),边代表实体 ...

  5. 如何使用智能问答机器人服务

    以某企业的IT呼叫中心为例,此呼叫中心每天都要为企业内部员工解答大量的IT问题,其中包括大量重复回答的问题.为了降低运维成本,该呼叫中心开始使用华为云CBS智能问答机器人来问答IT问题. 本文介绍了购 ...

  6. 开发一个智能问答机器人

    近期开发了一套基于自然语言处理的问答机器人,之前没有做过python,主要做asp.net,写这篇目的是给想要开发这类智能客服系统的朋友提供一个思路,项目已经上线,但在开发和设计过程中仍然有很多问题没 ...

  7. botpress搭建智能问答机器人

    botpress搭建智能问答机器人 一.下载botpress源码 访问:https://github.com/botpress/botpress,下载最新的botpress源码 二.本地安装依赖 执行 ...

  8. 深度学习之智能问答机器人实战

    深度学习之智能问答机器人实战 class1 对话类型 基于知识库问答 录入问题和答案 设计标准问题的相似问题 使用搜索和排序,根据相似度返回结果 基于规则脚本 以一定的语法定义规则 常用正则表达式等约 ...

  9. 七月Z星月度速览 | Milvus 源码解析重磅来袭、学术直播间开播、Milvus 社区在线答疑会重启、智能问答机器人上线……...

    #July Z星月度速览 · 小 Mil 来了!Milvus 智能问答机器人上线 · Zilliz 合伙人.工程总监栾小凡与社区分享首期 Milvus 底层源码架构解析 · Milvus 社区发起首期 ...

最新文章

  1. LeetCode简单题之删除字符使字符串变好
  2. menudiv.php,在div PHP之外返回的短代码函数
  3. __dopostback的用法
  4. boc android app,BOC
  5. java宋江,Java编程内功-数据结构与算法「单链表」,
  6. selenium之批量执行测试用例
  7. 7-81 编程团体赛 (20 分)
  8. python语法报错_Python语法的常见错误和处理异常
  9. AI 崛起?科技公司却偷偷用人类做机器人的工作!
  10. 16 岁赚到 20 万美元,我的编程之路始于对代码的热爱
  11. 双人贪吃蛇java 代码_java 双人贪吃蛇
  12. 干货:8266在3d打印机上的使用
  13. 计算机接口图形,图形设备接口
  14. The signing key‘s size is 1024 bits which is not secure enough for the RS256 algorithm.
  15. 工业手持PDA,你不得不知的重要性
  16. Java从输入中读取一个数组
  17. Dobbo的继任者?试用微博RPC框架Motan
  18. 百度地图添加自定义点标记、文本标注、点标记
  19. 油猴脚本——掘金Markdown格式适配器知识点记录【油猴脚本、Markdown、浏览器文件读取、tooltip、SVG、、模拟用户输入、aria-xxxx属性、剪切板操作、】
  20. 无聊科技正经事(第7期):跟村上春树学跑步,向古川武士学养成

热门文章

  1. laravel mysql 悲观锁_[笔记] 悲观锁与乐观锁
  2. 一、R语言简介【R与统计】
  3. AI比赛经验分享 - 总目录
  4. iOS开发 给view绘制虚线边框
  5. Linux PPP 实现源码分析
  6. 1分钟为Win10瘦身!把吃掉的硬盘找回来
  7. TF-IDF算法:用 Python 提炼财经新闻
  8. 用C#实现两个整数集的输入和并集
  9. 《数据挖掘导论》笔记(四)
  10. python鱼眼图像识别_使用OpenCV校准鱼眼镜头的方法