使用TCP协议实现智能聊天机器人
实验目的与要求
本实验是程序设计类实验,要求使用原始套接字编程,掌握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()