python聊天室

python聊天室

文章目录

  • python聊天室
    • chat_server
    • chat_client
    • 使用方式
      • 1.局域网聊天
      • 2.公网聊天

下面是一个简单的示例,包含了chat_client.py和chat_server.py的代码。

chat_server

chat_server.py监听指定的端口,并接收来自客户端的消息,并将消息广播给所有连接到服务器的客户端

import socket
import threading

def handle_client(client_socket, client_address):
    # 处理每个客户端的函数
    while True:
        try:
            data = client_socket.recv(1024).decode('utf-8')  # 接收客户端发送的消息
            if not data:
                break
            print(f'{client_address[0]}:{client_address[1]} - {data}')  # 打印客户端的消息和地址
            broadcast_data = f'{client_address[0]}:{client_address[1]} - {data}'.encode('utf-8')  # 准备广播消息
            broadcast(broadcast_data, client_socket)  # 广播消息给所有连接到服务器的客户端
        except:
            break

    client_socket.close()

def broadcast(message, sender_socket):
    # 广播消息给所有连接到服务器的客户端
    for client in clients:
        if client != sender_socket:
            client.send(message)

def start_server(port):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', port))  # 绑定服务器的 IP 地址和端口号
    server_socket.listen(10)  # 监听客户端连接,允许最多 5 个同时连接
    print(f'服务器已启动,监听端口 {port}')

    while True:
        client_socket, client_address = server_socket.accept()  # 接受客户端的连接请求
        clients.append(client_socket)  # 将客户端添加到客户端列表
        print(f'客户端已连接:{client_address[0]}:{client_address[1]}')
        client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
        client_thread.start()  # 启动一个线程处理客户端

clients = []

if __name__ == '__main__':
    port = int(input('请输入端口号:'))
    start_server(port)

chat_client

chat_client.py连接到服务器,并允许用户发送消息

import socket
import threading

def receive_messages(client_socket):
    # 接收服务器发送的消息
    while True:
        try:
            data = client_socket.recv(1024).decode('utf-8')  # 接收消息
            print(data)  # 打印消息
        except:
            break

    client_socket.close()

def send_message(client_socket):
    # 发送消息给服务器
    while True:
        message = input()  # 输入消息
        client_socket.send(message.encode('utf-8'))  # 发送消息到服务器

    client_socket.close()

def start_client(server_ip, server_port):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        client_socket.connect((server_ip, server_port))  # 连接到服务器
        print(f'已连接到 {server_ip}:{server_port}')
        receive_thread = threading.Thread(target=receive_messages, args=(client_socket,))
        receive_thread.start()  # 启动一个线程接收服务器的消息
        send_thread = threading.Thread(target=send_message, args=(client_socket,))
        send_thread.start()  # 启动一个线程发送消息
    except:
        print('连接失败。')

if __name__ == '__main__':
    server_ip = input('请输入服务器 IP 地址:')
    server_port = int(input('请输入服务器端口号:'))
    start_client(server_ip, server_port)

使用方式

1.局域网聊天

在本地使用cmd运行server,client可以起任意数量(不超过10个,在server里设置最大数量),client的IP地址填写自己本地ip即可,本地ip可以用ipconfig指令获取。

在这里插入图片描述

2.公网聊天

需要你有一个公网服务器,启动server即可,然后在任何电脑上启动client参与群聊。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/555297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯2024年第十五届省赛真题-好数

思路:枚举所有数,每个数分别判断。代码时间复杂度虽然是n^2,但是由于判断的数长度最长是7位,用字符串处理最多只循环7次,所以最大时间复杂度小 7*10的七次方,不会超时。库中的to_string时间复杂度太大&…

自己的事情自己做:使用 Python Turtle 绘制 Python Logo

以下代码中,将向你展示一个有趣的程序,如何使用 Python Turtle 中绘制 Python Logo。Python 翻译成汉语是蟒蛇的意思,Python 的 Logo 也是两条缠绕在一起的蟒蛇。 import turtlepen turtle.Turtle() turtle.bgcolor("black") pe…

元宇宙VR虚拟线上展馆满足企业快速布展的需要

想要拥有一个VR线上虚拟展馆,展现您的城市风采或企业特色吗? 相比实体展馆搭建,VR线上虚拟展馆投入资金少,回报周期短,只需几个月的时间,您就能开始资金回笼。那么一个VR线上虚拟展馆多少钱呢? 深圳VR公司华锐视点基…

LeetCode701:二叉搜索树中的插入操作

题目描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 代码 递归法 class Solution { public…

5GNR刷题

5G帧结构 5G NR帧结构的基本时间单位是( C ) A) subframe B) slot C) Tc D) symbol 5G无线帧长是多少ms(B) A) 5 B) 10 C) 20 D) 40 下面哪种子载波间隔是中国移动白皮书中规定必选(B ) A) 15KHz B) 30KHz C) 60KHz D) 120KHz 5G参数集包含哪…

【学习笔记二十】EWM TU运输单元业务概述及后台配置

一、EWM TU运输单元业务流程概述 TU是指车辆和运输单元在货场中,移动车辆或运输单元。 车辆是特定运输方式的专用化工具,车辆可以包含一个或多个运输单元,并代表运输车辆的实际实体。 运输单元是用于运输货物的车辆的最小可装载单位,运输单元可以是车辆的固定部分。 …

游游的you矩阵

题目: 游游拿到了一个字符矩阵,她想知道有多少个三角形满足以下条件: 三角形的三个顶点分别是 y、o、u 字符。三角形为直角三角形,且两个直角边一个为水平、另一个为垂直。 输入描述: 第一行输入两个正整数n,m&#…

数字营销:细分-目标-定位(STP)模式——如何实现精准营销

细分-目标-定位(STP)模型是最广为人知的营销策略之一。作为营销人员,我们倾向于追逐新鲜事物,总是追求最新、最闪亮的营销技术,并为自己领先于趋势而感到自豪。与内容营销相结合,STP模式仍然是简化营销运作…

【详细的Kylin使用心得】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

【JavaWeb】异步请求——AJAX

目录 Ajax(Asynchronous JavaScript and XML)优点传统Web与Ajax的差异Ajax工作流程Ajax 经典应用场景XMLHttpRequest常用方法事件常用属性 ajax: GET请求和POST请求的区别 传统Ajax实现传统方式实现Ajax的不足 $.ajax()语法常用属性参数常用函数参数 Aja…

【LeetCode题解】2007. 从双倍数组中还原原数组

文章目录 [2007. 从双倍数组中还原原数组](https://leetcode.cn/problems/find-original-array-from-doubled-array/)思路:代码: 2007. 从双倍数组中还原原数组 思路: 首先,对输入的 changed 数组进行排序,以便后续操…

隐式/动态游标的创建与使用

目录 将 emp 数据表中部门 10 的员工工资增加 100 元,然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量 动态游标的定义 声明游标变量 打开游标变量 检索游标变量 关闭游标变量 定义动态游标,输出 emp 中部门 10 的所有员工的工号和姓名 Orac…

LeetCode-热题100:102. 二叉树的层序遍历

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: [[3],[9,20],[15,7]] 示例 2&am…

数据结构之排序了如指掌(二)

目录 题外话 正题 选择排序 选择排序思路 选择排序代码详解 选择排序复杂度 双向选择排序 双向选择排序思路 双向选择排序代码详解 堆排序 堆排序思路 堆排序代码详解 堆排序复杂度 冒泡排序 冒泡排序思路 冒泡排序代码详解 冒泡排序复杂度 小结 题外话 今天…

供应链投毒预警 | 开源供应链投毒202403月报发布啦!(含投毒案例分析)

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获,能够第一时间捕获开源组件仓库中的恶意投毒攻击。在2024年3月份,悬镜供应链安全情报中心在NPM官方仓库&#xff0…

2024华中杯A题完整1-3问py代码+完整思路16页+后续参考论文

A题太阳能路灯光伏板朝向问题 (完整版资料文末获取) 第1小问:计算每月15日的太阳直射强度和总能量 1. 理解太阳直射辐射和光伏板的关系**:光伏板接收太阳辐射并转化为电能,直射辐射对光伏板的效率影响最大。 2. 收集…

MES给制造业带来看得见的效益

作为连接生产控制系统和企业管理系统的纽带,MES为企业提供实时生产数据,帮助企业进行更加明智的决策,并实时调整生产管理,最终降低运营成本、提高运营利润和资产利用率、保证生产安全与合规。 MES主要功能包括工艺技术管理、生产…

面试题:一个 URL 在浏览器被输入到页面展现的过程中发生了什么

文章目录 前言一、回答二、深入追问 前言 这是一段~ 经典的旋律 ~,不好意思串台了,哈哈,这是一个经典的面试题:一个URL从浏览器到页面的过程中发生了什么,那么今天就带大家九浅一深来研究一下 觉得不错的同学可以加我…

波士顿动力抛弃液压机器人Atlas,推出全新电动化机器人,动作超灵活

本周,机器人科技巨头波士顿动力宣布液压Atlas退役,并推出了下一代产品——专为实际应用而设计的全电动Atlas机器人,这也意味着人形机器人迈出了商业化的第一步。 Atlas——人形机器人鼻祖 Atlas(阿特拉斯)这个名字最…

CTFHUB-技能树-Web前置技能-文件上传(前端验证—文件头检查)

CTFHUB-技能树-Web前置技能-文件上传(前端验证—文件头检查) 文章目录 CTFHUB-技能树-Web前置技能-文件上传(前端验证—文件头检查)前端验证—文件头检查题目解析 各种文件头标志 前端验证—文件头检查 题目考的是:pn…