使用TCP协议实现智能聊天机器人

发布于:2025-02-10 ⋅ 阅读:(11) ⋅ 点赞:(0)

实验目的与要求

本实验是程序设计类实验,要求使用原始套接字编程,掌握TCP/IP协议与网络编程Sockets通信模型,并根据教师给定的任务要求,使用TCP协议实现智能聊天机器人。

(1)熟悉标准库socket 的用法。

(2)熟悉TCP 协议工作原理。

(3)理解端口号的概念与作用。

(4)熟悉Socket 编程。

实验原理与内容

1. 利用所安装部署好的开发环境设计编程。

2. 实现TCP协议实现智能聊天机器人。

利用TCP/IP协议与网络编程Sockets通信模型,根据任务要求,实现多进程/多线程并发机制,开发设计一个基于TCP协议实现智能聊天机器人。

编写聊天程序的服务端代码和客户端代码。完成后,先启动服务端代码,然后启动客户端程序用输入问题,服务端可以返回相应的答案。要求服务端代码具有一定的智能,能够根据不完整的问题识别客户端真正要问的问题。

验设备与软件环境

1.Windows 2003/ win7/win8/win10 操作系统。

2.Visual Studio/Pycharm及以上

实验过程与结果

服务端

import socket

# 定义主机和端口
HOST = '10.225.107.68'  # 本地主机
PORT = 8888

# 为聊天机器人定义回复
responses = {
    "你好": "你好!我能为你做些什么呢?",
    "你好吗": "我只是一个程序,但还好,谢谢你的关心!",
    "再见": "再见!祝你有个美好的一天!",
    "default": "抱歉,我不太明白你的意思。"
}

# 创建TCP/IP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 将套接字绑定到地址和端口
server_socket.bind((HOST, PORT))

# 监听传入连接
server_socket.listen(1)
print("等待连接...")

# 接受传入连接
client_socket, client_address = server_socket.accept()
print(f"来自{client_address}的连接已建立。")

# 处理客户端消息的函数
def handle_client_message(message):
    message = message.lower()
    response = responses.get(message, responses["default"])
    return response

try:
    while True:
        # 从客户端接收消息
        data = client_socket.recv(1024).decode("utf-8")
        if not data:
            break
        
        print(f"客户端:{data}")
        
        # 处理客户端消息
 response = handle_client_message(data)
        
        # 将响应发送给客户端
        client_socket.sendall(response.encode("utf-8"))
        print(f"服务器:{response}")
finally:
    # 清理连接
    client_socket.close()
    server_socket.close()

客户端

import socket

# 定义服务端主机和端口
SERVER_HOST = '10.225.107.68'
SERVER_PORT = 8888

# 创建TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务端
client_socket.connect((SERVER_HOST, SERVER_PORT))

try:
    while True:
        # 从用户输入中获取消息并发送给服务器
message = input("你:")
        client_socket.sendall(message.encode("utf-8"))

        # 接收来自服务器的响应
        response = client_socket.recv(1024).decode("utf-8")
        print(f"服务器:{response}")
finally:
    # 清理连接
    client_socket.close()