基于TCP协议的简易聊天机器人设计与实现

服务器端:

import socket
import threading

# 服务器地址和端口
SERVER_ADDRESS = ('127.0.0.1', 8888)

# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(SERVER_ADDRESS)
server_socket.listen(5)  # 允许最多5个客户端连接

print('等待客户端连接...')


# 定义智能回复函数
def smart_reply(message):
    if '你好' in message:
        return '你好,请问有什么可以帮助你的吗?'
    elif '天气' in message:
        return '今天天气晴朗,温度适宜。'
    elif '再见' in message:
        return '再见,祝您有愉快的一天!'
    else:
        return '抱歉,我不明白您的意思。'


# 处理客户端连接
def handle_client(client_socket, client_address):
    print(f'客户端 {client_address} 已连接')

    while True:
        try:
            # 接收消息
            received_data = client_socket.recv(1024).decode()
            if not received_data:
                break
            print(f'客户端 {client_address} 发送的消息:{received_data}')

            # 智能回复
            reply_message = smart_reply(received_data)

            # 发送回复消息给客户端
            client_socket.send(reply_message.encode())
            print(f'发送回复消息给客户端 {client_address}: {reply_message}')
        except:
            break

    # 关闭连接
    client_socket.close()
    print(f'与客户端 {client_address} 的连接已关闭')


# 接受客户端连接并创建线程处理
while True:
    client_socket, client_address = server_socket.accept()
    thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
    thread.start()

注意事项:

  • 运行该程序前,请确保本地端口8888没有被占用。
  • 可以在多个客户端上运行相同的客户端程序来模拟多个客户端连接。
  • 在smart_reply函数中,可以根据需求自定义更多的智能回复规则。

客户端:

import socket

# 服务器地址和端口
SERVER_ADDRESS = ('127.0.0.1', 8888)

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

# 连接服务器
client_socket.connect(SERVER_ADDRESS)
print('已连接到服务器')

while True:
    # 发送消息给服务器
    message = input('请输入消息:')
    client_socket.send(message.encode())

    # 接收服务器的回复消息
    reply_message = client_socket.recv(1024).decode()
    print(f'服务器回复:{reply_message}')

    # 判断是否结束聊天
    if message.lower() == 'bye':
        break

# 关闭连接
client_socket.close()

 

程序创建了一个TCP客户端套接字,通过connect()方法与指定的服务器进行连接。然后进入一个循环中,不断发送消息给服务器并接收服务器的回复消息。当输入"bye"时,会结束聊天并关闭连接。

请注意,在运行客户端程序之前,请确保服务器端程序已经正确启动,并且服务器的IP地址和端口号与客户端程序中的设置一致。

如果连接上后发送消息没有回应,可能是由于以下原因:

  1. 服务器端程序问题:首先,请确保服务器端程序已经正确启动,并且正在监听指定的地址和端口。确保服务器程序没有崩溃或出现异常导致无法正常处理客户端消息。

  2. 网络连接问题:检查网络连接是否正常,确保客户端能够与服务器建立可靠的TCP连接。可以尝试在不同的网络环境下进行测试,例如在本地环境、局域网环境或互联网环境下进行连接。

  3. 防火墙或安全软件阻止:确保防火墙或安全软件没有阻止客户端程序与服务器进行通信。请将客户端程序添加到防火墙例外列表中,或者暂时关闭防火墙和安全软件进行测试。

  4. 网络延迟或传输错误:在某些情况下,网络延迟或传输错误可能会导致消息无法及时到达服务器或回复消息无法及时返回给客户端。可以增加适当的等待时间来处理延迟,或者使用异常处理机制来捕获并处理可能发生的传输错误。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值