python聊天室

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.mzph.cn/bicheng/171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

35岁+技术人的困境与选择

前言 最近一些大厂的持续裁员事件,让职场年龄焦虑的话题又火热起来了。职场的年龄焦虑是客观存在的事实,这是市场与资本相互作用的必然结果。资本在运作的过程中,肯定是要逐利的,最终也是要趋向于利润最大化的。 因此&#xff0…

WdatePicker异常,无法弹出日期选择框

官网:My97日期控件官方网站 My97 DatePickerhttp://www.my97.net/ 可能使版本太老了,可以更新一下,然后根据官方的文件进行使用。 我的异常是因为在网上找的包里面缺少文件,去官网拉了一下最新的就行了。

AR地图导览小程序是怎么开发出来的?

在移动互联网时代,AR技术的发展为地图导览提供了全新的可能性。AR地图导览小程序结合了虚拟现实技术和地图导航功能,为用户提供了更加沉浸式、直观的导览体验。本文将从专业性和思考深度两个方面,探讨AR地图导览小程序的开发方案。 编辑搜图 …

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

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

变配电场所智能综合监控系统无人化与自动化升级改造

一 项目背景 国家电力建设飞速发展,为了提高管理水平,智能化建设迫在眉睫。变配电场所作为电网中的核心单元,数量巨大,是智能化建设的中坚部分。但由于变配电场所分布的地理位置过于分散,且配电网的自动化水平有待提高,单纯依靠人力来对变配电场所进行巡视,不仅增加…

python 文件输入输出

python 文件输入输出 一、输入输出1. 输出格式美化2. 旧式字符串格式化3. 读取键盘输入4. 读和写文件5. 文件对象的方法6. pickle 模块 二、文件操作1. File(文件) 方法2. mode 参数有:3. file 对象 三、 OS 文件操作1. OS 文件/目录方法 四、代码概览(输…

【canvas】canvas综合运用:心形图案

#简言 利用canvas画出心形图案。 心形 心形图案可以两个椭圆相交组合&#xff0c;也可以直接画路径实现。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" conte…

深入了解CSS 元素尺寸单位:像素、百分比、em、rem 和 viewport 单位

你好&#xff0c;我是小白Coding日志&#xff0c;一个热爱技术的程序员。在这里&#xff0c;我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客&#xff0c;一起在技术的世界里探索前行吧&#xff01; 在前端开发中&am…

labelimg安装和使用(解决闪退问题)

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f525; 系列专栏&#xff1a;计算机视觉 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到我的代码世界~ &#x1f601; 喜…

图与图搜索算法

图搜索算法是一个非常重要的概念&#xff0c;它是计算机科学中图论和算法设计的基础部分。在开始讨论图搜索算法之前&#xff0c;我们需要先理解什么是图以及图的基本结构。 什么是图&#xff1f; 图&#xff08;Graph&#xff09;是一种非线性数据结构&#xff0c;它由一组点…

C 错误处理

C 语言不提供对错误处理的直接支持&#xff0c;但是作为一种系统编程语言&#xff0c;它以返回值的形式允许您访问底层数据。在发生错误时&#xff0c;大多数的 C 或 UNIX 函数调用返回 1 或 NULL&#xff0c;同时会设置一个错误代码 errno&#xff0c;该错误代码是全局变量&am…

Redis集群和哨兵

Redis集群和哨兵是Redis系统中的重要组件&#xff0c;它们在保障数据可靠性、扩展性和高可用性方面发挥着关键作用。 Redis集群主要解决了单一Redis实例在存储和性能上的限制。通过将数据分散到多个Redis节点上&#xff0c;集群能够实现数据的水平扩展&#xff0c;从而支持更大…

点云的投影------PCL

点云的投影 /// <summary> /// 参数化模型投影点云 /// </summary> /// <param name"cloud">点云</param> /// <param name"x">投影平面x面的系数</param> /// <param name"y"></param> /// &…

Python下利用Selenium获取动态页面数据

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Java中方法的重载:初学者易懂的指南

Java中方法的重载&#xff1a;初学者易懂的指南 在Java编程中&#xff0c;方法的重载&#xff08;Overloading&#xff09;是一个非常重要的概念。它允许我们在同一个类中定义多个同名但参数列表不同的方法。这样&#xff0c;我们就可以根据传递的参数类型和数量来执行不同的操…

使用python进行网站答题操作

介绍&#xff1a; 使用Python和DrissionPage模块编写自动化脚本&#xff0c;以模拟人的行为访问网站并获取题目答案进行自动答题。这个脚本似乎是为答题网站设计的&#xff0c;通过监控特定数据包地址来获取题目答案&#xff0c;并模拟点击正确答案进行答题。 代码中的逻辑包…

C++奇迹之旅:探索C++拷贝构造函数

文章目录 &#x1f4dd;拷贝构造函数&#x1f320; 概念&#x1f309;特征 &#x1f320;浅拷贝(值拷贝)&#x1f309;深拷贝 &#x1f320;拷贝构造函数典型调用场景&#x1f320;应用时效率的思考&#x1f6a9;总结 &#x1f4dd;拷贝构造函数 &#x1f320; 概念 在现实生…

SHELL编程----判断输入的是否为IP地址

描述 写一个脚本统计文件nowcoder.txt中的每一行是否是正确的IP地址。 如果是正确的IP地址输出&#xff1a;yes 如果是错误的IP地址&#xff0c;且是四段号码的话输出&#xff1a;no&#xff0c;否则的话输出&#xff1a;error 假设nowcoder.txt内容如下&#xff1a; 192.1…

MySQL运维故障排查与高效解决方案

一、引言 MySQL作为关键的业务数据库&#xff0c;其稳定运行对于企业的日常运营至关重要。然而&#xff0c;在实际运维过程中&#xff0c;我们可能会遇到各种故障和问题。本文将针对MySQL运维中常见的故障进行深度排查&#xff0c;并提供高效的解决方案&#xff0c;帮助运维人员…

京西商城——前端项目的创建以及前后端联调

创建VUE项目 在jingxi_shop_project文件夹中再创建一个 frontend 文件夹用来存放前端项目 /jingxi_shop_project/backend/jingxi_shop_project....../frontend/jingxi_shop_web......首先要安装 node.js 和 VUE cli&#xff0c;进入到项目目录内创建项目 vue create jingxi_…