猫史档案馆


【Python作品分享】聊天室

用户:威武的潘达熊mIca威武的潘达熊mIca查看:1 回复:2 评论:1 创建时间:2023-08-30T22:23:03


【作品展示】

center_image

 

【作品介绍】

可以和别人说话

 

【作品源代码】

import socket
import threading

# 服务器配置
server_ip = '127.0.0.1'
server_port = 8888

# 连接列表和锁
connections = []
lock = threading.Lock()

# 广播消息给所有连接


def broadcast_message(message):
    with lock:
        for conn in connections:
            conn.send(message.encode('utf-8'))

# 处理客户端连接


def handle_connection(conn, addr):
    print(f'New connection from: {addr}')

    conn.send("Welcome to the chat room!".encode('utf-8'))
    broadcast_message(f'{addr} has joined the chat.'.encode('utf-8'))

    with lock:
        connections.append(conn)

    while True:
        try:
            data = conn.recv(1024).decode('utf-8')
            if not data:
                break
            broadcast_message(f'{addr}: {data}'.encode('utf-8'))
        except Exception as e:
            print(f'Error receiving data from {addr}: {str(e)}')
            break

    with lock:
        connections.remove(conn)
        broadcast_message(f'{addr} has left the chat.'.encode('utf-8'))

    conn.close()

# 启动服务器


def start_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((server_ip, server_port))
    server_socket.listen(5)
    print(f'Server started on {server_ip}:{server_port}')

    while True:
        conn, addr = server_socket.accept()
        thread = threading.Thread(target=handle_connection, args=(conn, addr))
        thread.start()

# 启动客户端


def start_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((server_ip, server_port))

    def receive_messages():
        while True:
            try:
                data = client_socket.recv(1024).decode('utf-8')
                print(data)
            except Exception as e:
                print(f'Error receiving data: {str(e)}')
                break

    receive_thread = threading.Thread(target=receive_messages)
    receive_thread.start()
    while True:
        message = input('请输入:')
        client_socket.send(message.encode('utf-8'))


# 在这里根据需要启动服务器或客户端
start_server()
# start_client()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
爱吃乌龟的小monkey爱吃乌龟的小monkey

不行啊,每次只能一个用户运行!

点赞0


评论


jczzcjczzc

作者是不是没有发现socket挂在localhost下面了……emotion_编程猫_溜了溜了

点赞0


评论