python网络聊天程序设计

本文介绍了如何使用Python的Socket库创建一个基本的网络聊天程序,包括服务器端代码,处理客户端连接、接收昵称、消息广播以及客户端的登录和消息发送功能。
摘要由CSDN通过智能技术生成

本文使用创作助手。

下面是一个使用Python和Socket编程实现网络聊天程序的简单示例:

服务器端代码:

import socket
import threading

# 服务器地址和端口
SERVER_HOST = '0.0.0.0'
SERVER_PORT = 12345

# 存储连接的客户端和对应的昵称
clients = {}

# 用于接收和处理消息的函数
def handle_client(client_socket, client_address):
    # 接收客户端的昵称
    nickname = client_socket.recv(1024).decode()
    print(f'{nickname} 进入聊天室')

    # 将客户端的昵称和对应的socket存储到字典中
    clients[client_socket] = nickname

    # 广播消息给其他客户端
    broadcast(f'{nickname} 加入了聊天室'.encode())

    while True:
        try:
            # 接收客户端发送的消息
            message = client_socket.recv(1024)
            if message:
                # 广播消息给其他客户端
                broadcast(message, nickname + ': ')
            else:
                # 如果接收的消息为空,说明客户端断开连接
                remove_client(client_socket)
                break
        except:
            # 如果发生错误,说明客户端断开连接
            remove_client(client_socket)
            break

# 广播消息给所有客户端
def broadcast(message, prefix=''):
    for client_socket in clients:
        client_socket.send(prefix.encode() + message)

# 移除断开连接的客户端
def remove_client(client_socket):
    nickname = clients[client_socket]
    del clients[client_socket]
    broadcast(f'{nickname} 离开了聊天室'.encode())

# 创建服务器并监听客户端连接
def start_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((SERVER_HOST, SERVER_PORT))
    server_socket.listen()
    print('服务器启动,等待客户端连接...')

    while True:
        client_socket, client_address = server_socket.accept()
        # 启动独立的线程来处理新的客户端连接
        client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
        client_thread.start()

if __name__ == '__main__':
    start_server()

客户端代码:

import socket
import threading

# 服务器地址和端口
SERVER_HOST = 'localhost'
SERVER_PORT = 12345

# 客户端登录
def login():
    nickname = input('请输入您的昵称: ')
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((SERVER_HOST, SERVER_PORT))
    client_socket.send(nickname.encode())

    # 启动独立的线程来接收服务器的消息
    receive_thread = threading.Thread(target=receive_messages, args=(client_socket,))
    receive_thread.start()

    # 不断接收用户输入的消息并发送给服务器
    while True:
        message = input()
        client_socket.send(message.encode())

# 接收服务器的消息
def receive_messages(client_socket):
    while True:
        message = client_socket.recv(1024)
        print(message.decode())

if __name__ == '__main__':
    login()

在这个示例中,服务器和客户端分别运行在不同的机器上。客户端在登录时输入昵称,然后与服务器建立连接。服务器接收客户端的昵称,并将其存储在字典中。当一个客户端发送消息时,服务器会将消息广播给所有其他客户端。

请注意,这只是一个简单的示例,功能还不完善。你可以根据自己的需求进行进一步的开发和扩展,例如添加用户登录验证、私聊功能等。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值