python聊天机器人-tcp通话

这次的聊天机器人分为两个部分一是服务端和客户端,使用的时tcp

tcp在日常生活中极为常见,在进行通信之前会进行三次握手

tcp原理

他的工作图大概如下

python聊天机器人-tcp通话插图
然后这次的聊天机器人是从网上随便找的一个api

免费的

聊天机器人api

大家感兴趣可以去看看

聊天机器人网址

调用api

这一步在文档里面就有直接复制

import json
import requests
sess = requests.get('https://api.ownthink.com/bot?spoken=姚明多高啊?')
answer = sess.text
answer = json.loads(answer)
print(answer)

但是他返回的是一个字典类型需要自己通过键值对把回答提取出来

tcp服务器端

这一步非常简单,就是写一个循环然后接受和响应即可

import json
import requests
from socket import *

from pprint import pprint

class bot:
    def __init__(self) -> None:
        pass
        
    def message(data):
        url='https://api.ownthink.com/bot?spoken={data}'.format(data=data.decode())
        sess = requests.get(url)
        answer = sess.text
        answer = json.loads(answer)['data']['info']['text']
        print(data)
        return answer

        
    def client_handler():
        HOST = '127.0.0.1'
        PORT = 9000
        BUFSIZ = 1024
        ADDRESS = (HOST, PORT)

        tcpServerSocket = socket(AF_INET, SOCK_STREAM)
        tcpServerSocket.bind(ADDRESS)
        print("服务器启动,监听端口{}...".format(ADDRESS[1]))
        tcpServerSocket.listen(5)

        try:
            while True:
                print('服务器正在运行,等待客户端连接...')

                client_socket, client_address = tcpServerSocket.accept()
                print('客户端{}已连接!'.format(client_address))

                try:
                    while True:

                        data = client_socket.recv(2048)
                        if data:
                            print('接收到消息 {}({} bytes) 来自 {}'.format(data.decode('utf-8'), len(data), client_address))
                            # 返回响应数据,将客户端发送来的数据原样返回
                            client_socket.send(bot.message(data).encode())
                            print('发送消息 {} 至 {}'.format(data.decode('utf-8'), client_address))
                        else:
                            print('客户端 {} 已断开!'.format(client_address))
                            break
                finally:
                    client_socket.close()
        finally:
            tcpServerSocket.close()
bot.client_handler()





        

客户端

同上面差不多直接上代码

from socket import *

HOST = '127.0.0.1'
PORT = 9000
BUFSIZ = 1024
ADDRESS = (HOST, PORT)

tcpClientSocket = socket(AF_INET, SOCK_STREAM)
tcpClientSocket.connect(ADDRESS)

while True:
    data = input('>')
    if not data:
        break

    # 发送数据
    tcpClientSocket.send(data.encode('utf-8'))
    # 接收数据
    data, ADDR = tcpClientSocket.recvfrom(BUFSIZ)
    if not data:
        break
    print("服务器端响应:", data.decode('utf-8'))

print("链接已断开!")
tcpClientSocket.close()

其中host和port可以自己更改

这里演示的代码知识最基础的还可以加上多线程等等

RUN

然后是最激动的运行时刻

想起的服务端

python聊天机器人-tcp通话插图1
然后是客户端
python聊天机器人-tcp通话插图2
在链接成功后服务端会有显示
python聊天机器人-tcp通话插图3

结语

都挺好的只不过这个机器人好像有点傻

反正是免费的,接不要这么多自行车了

如果大家有更好的api可以自行更换

© 版权声明
THE END
喜欢就支持一下吧
点赞2342 分享
评论 抢沙发

请登录后发表评论