python聊天室

news/2024/5/17 11:45:25

python聊天室

文章目录

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

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

chat_server

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

import socket
import threadingdef handle_client(client_socket, client_address):# 处理每个客户端的函数while True:try:data = client_socket.recv(1024).decode('utf-8')  # 接收客户端发送的消息if not data:breakprint(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:breakclient_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 threadingdef receive_messages(client_socket):# 接收服务器发送的消息while True:try:data = client_socket.recv(1024).decode('utf-8')  # 接收消息print(data)  # 打印消息except:breakclient_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参与群聊。

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


http://www.mrgr.cn/p/43656010

相关文章

MercadoLibre(美客多)入仓预约系统操作流程-自动化约号(开篇)

目录 一、添加货件信息 二、输入货件信息 三、选择发货 四、填写交货日期 五、注意事项 MercadoLibre(美客多)于2021年10月18号上线了新预约入仓系统,在MercadoLibre美客多平台上,新入仓预约系统是一项非常重要的功能&#x…

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

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

利用Python进行数据分析 原书第2版 (Wes McKinney)pdf下载

链接:https://pan.baidu.com/s/18MOC0666S-EX_0ks4ivR2g 提取码:rmkk 本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas、NumPy…

<计算机网络自顶向下> 多路复用与解复用

多路复用/解复用 端口号区分进程到进程多路解复用工作原理 解复用作用:TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程主机收到IP数据报 每个数据报有源IP地址和目标地址每个数据报承载一个传输层报文段…

算法:期望场景;鲁棒优化

部分代码 for i1:T stst[D_DGk(i)*min_P_DG<P_DGk(i)<D_DGk(i)*max_P_DG]; end for i2:T indicatorD_DGk(i)-D_DGk(i-1); rangei:min(T,iT_up-1); st st[D_DGk(range)>indicator]; end for i2:T indicatorD_DGk(i-1)-D_DGk(i); rangei:min(T…

神经网络训练速度相关学习--1

2024-04-18 程序执行的调用顺序: cpu接收到指令,执行——从存储器中加载数据到cpu,对数据进行预处理——预处理后的数据传输gpu——gpu执行运算——将运算结果存储到存储器——开始新一轮batch运算(每一次计算都需要从内存中读取数据) 另外参考:先将硬盘中的数据读取到内…

LeetCode——572—— 另一棵树的子树

1.题目 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/subtree-of-another-tree/ 给你两棵二叉树 root 和 subRoot …

08-接口文档和JWT

接口文档 楔子 接口文档对于协调前后端开发非常重要,可以避免因为开发习惯不同而导致的意外情况。在项目中,如果前后端开发各自为战,可能会出现不一致的情况。因此,接口文档可以约束双方,确保他们按照统一的规范进行开发,从而提高协同开发的效率和一致性。 规范 接口文档…

“趣”学架构

搭系统先搭架子 对于多个业务需求,都有打印入参、检验入参、业务逻辑、打印出参、处理异常的流程。 方法1:做业务逻辑的聚类 但内容经常不同,很难去做大范围的聚类 方法2:模版方法模式 用抽象类做约束,必须实现这些接口伪代码 弊端业务需求会导致代码经常多一个功能,改一…

Spring 源码阅读(一)环境搭建

注意事项:使用 2024-03-14 发布的 Spring 5.3.33 版本 IDE 工具使用了 Intellij IDEA,同时为了简化不必要的内容没单独配置 Gradle 环境 JDK 版本采用 Eclipse Temurin 1.8/11 均可下载源码 下载 SpringFramework 源码,本次选择 5.3.33 版本,发布日期 2024-03-14,通过 Int…

4.18作业

顺序栈&#xff1a; #include "seq_stack.h" seq_p creat_stack() //从堆区申请顺序栈的空间 {seq_p S(seq_p)malloc(sizeof(seq_stack));if(SNULL){printf("空间申请失败\n");return NULL;}bzero(S->data,sizeof(S->data));S->top-1;return S; …

性能测试——性能测试-常见linux性能指标监控命令

vmstat命令: top命令: free -h命令: df -h命令: mpstat命令: sar – 收集和报告系统活动

Apache Zeppelin 命令执行漏洞复现(CVE-2024-31861)

0x01 产品简介 Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的开源框架&#xff0c;Zeppelin提供了数据分析、数据可视化等功能&#xff0c; 0x02 漏洞概述 Apache Zeppelin 中代码生成控制不当&#xff08;“代码注入”&#xff09;漏洞。攻击者可以使用 She…

这个网络爬虫代码,拿到数据之后如何存到csv文件中去?

大家好,我是皮皮。 一、前言 还是昨天的那个网络爬虫问题,大佬们,帮忙看看这个网络爬虫代码怎么修改?那个粉丝说自己不熟悉pandas,用pandas做的爬虫,虽然简洁,但是自己不习惯,想要在他自己的代码基础上进行修改,获取数据的代码已经写好了,就差存储到csv中去了。 他的…

免费的 ChatGPT、GPTs、AI绘画(国内版)

&#x1f525;博客主页&#xff1a;白云如幻❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立&#xff0c;彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口&#xff0c;等待Broker、Producer、Consumer连接&#xff0c; 相当于一个路由控制中心。主要是用来保存topic路由信息&#…

使用Java调用音乐开放API,并进行播放

使用Java调用音乐开放API&#xff0c;并进行播放 背景描述 电脑没有下载音乐软件&#xff0c;使用网页播放又不太方便&#xff0c;所有就想着使用Java语言直接调用音乐开放API&#xff0c;然后进行播放音乐。 具体代码如下&#xff0c;包含了注释 package com.lowkey.comple…

林草资源管理系统:构筑绿色长城,守护自然之美

在全球气候变化和生态环境恶化的背景下,森林和草原资源的保护、恢复和合理利用显得尤为重要。林草资源管理系统的建立,旨在通过现代信息技术手段,提升林草资源管理的效率和质量,确保自然资源的可持续发展。 项目背景 森林和草原是地球上重要的生态系统,它们不仅为人类提供…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果 一、简单介绍 二、简单把视频的水印去掉效果实现原理 …