socket通信(四):socket实现机器人在线聊天

实现思路:客户端(本机)向服务端发送消息;服务端接收消息,并调用图灵机器人API接口,获取回复返回给客户端。

  1. 首先需要先去图灵机器人http://www.tuling123.com申请帐号,并创建机器人应用,获取授权码(apikey);

  2. 客户端;
    创建socket-->连接服务器-->发送请求-->关闭socket-->结束进程

import socket
import time
    
def recv_msg(s):
    data = s.recv(1024)
    if data:
        print("\n【机器人小图】"+" "+time.strftime('%Y-%m-%d:%H:%M:%S',time.localtime(time.time())))
        print(data.decode('utf-8'))
        return True
    return False
    
username = input('input your name:')
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', port))
# 接受服务器的welcom
data = s.recv(1024)
print(data.decode('utf-8'))
msg = input('input msg:')
s.send("{username}::{msg}".format(username=username,msg=msg).encode("utf-8"))
while True:
    if recv_msg(s):
        msg = input('\n I:')
        s.send("{username}::{msg}".format(username=username,msg=msg).encode("utf-8"))
        if msg == 'exit':
            print('chat is over.')
            break
s.close()
  1. 服务端;
    创建socket-->绑定地址端口-->监听-->与客户端建立连接-->处理客户端的请求-->关闭socket
    ctrl+c手动结束服务器的进程
import socket
import time
import threading
import requests
import json

def get_response(info):
    # 调用图灵机器人API
    key = 'caeac376c1084b9ca3bd762244b60ce8'
    url = 'http://www.tuling123.com/openapi/api?key=' + key + '&info=' + info
    res = requests.get(url)
    res.encoding = 'utf-8'
    jd = json.loads(res.text)
    return jd['text']

# 处理客户端的请求
def tcplink(sock, addr):
    sock.send("welcom!".encode('utf-8'))
    # 客户端地址
    print('client address is:', sock.getpeername())
    # 本机(服务端)地址
    print('server address is:', sock.getsockname())
    while True:
        data = sock.recv(1024).decode('utf-8')
        # 处理接受到的消息
        username, msg = data.split('::')[0], data.split('::')[1]
        if msg == 'exit':
            break
        print(username+':'+time.strftime('%Y-%m-%d:%H:%M:%S',time.localtime(time.time())))
        print(msg)
        response = get_response(msg)
        sock.send(response.encode('utf-8'))
    sock.close()
    print('the chat with %s is over.' % username)
    
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', port))
s.listen(5)
print("listening 127.0.0.1:%d, and waiting for connection..." % port)
while True:
    sock, addr = s.accept()
    t = threading.Thread(target=tcplink, args=(sock, addr, ))
    t.start()
  1. 实现效果


    socket通信(四):socket实现机器人在线聊天_第1张图片
    在线聊天机器人

你可能感兴趣的:(socket通信(四):socket实现机器人在线聊天)