python scoket 多人聊天室 带界面

news2024/11/27 22:41:33

前言

本来是为了局域网内能够复制段儿代码方便远程调试用的,ssh当然也可以,当然还是我头脑风暴散发,想到这里了。于是从网上拉了一个,改通之后,留一个备份。

期望还是很好的,以后用来支持ubuntu聊天之类的,当然这就得在html上来,不急慢慢来

代码

服务端代码:

import socket
import time
from threading import Thread

# 创建socket,绑定地址和端口号
host = '192.168.8.221'
port = 12345
# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))  # 绑定地址和端口号

# 存放用户昵称和地址
client = {}
address = {}
# 服务器可接收的client连接数
accept_num = 10


def client_join(conn, add):  # 新客户端加入
    print("为新用户建立进程")
    nikename = conn.recv(1024).decode('utf8')
    welcome = f'欢迎{nikename}加入聊天室'
    print(welcome)
    client[conn] = nikename  # 将客户端加入client
    brodcast(bytes(welcome, 'utf8'))  # 广播欢迎信息
    while True:
        time.sleep(0.1)
        try:
            msg = conn.recv(1024)
            print(msg)
            brodcast(msg, nikename + ':')  # 广播聊天信息
        except:
            print("接收失败")
            conn.close()
            client[conn]=None
            brodcast(bytes(f'{nikename}离开聊天室\n', 'utf8'))  # 用户断开连接


def brodcast(msg, nikename=''):  # 向所有客户端广播新信息
    for conn in client:
        print(f"向{conn} 发送 {msg}")
        conn.send(bytes(nikename, 'utf8') + msg)
        print("发送成功")


if __name__ == '__main__':
    s.listen(accept_num)
    print('服务器已开启,正在监听用户请求')
    while True:
        conn, add = s.accept()
        print(add, '已建立连接')
        conn.send('欢迎来到聊天室,请输入你的昵称后进行聊天\n'.encode('utf8'))
        address[conn] = add
        Thread(target=client_join, args=(conn, add)).start()  # 为新连接的客户端建立新线程

客户端代码:

import socket
import traceback
from threading import Thread
import tkinter as tk

# socket接入
host = '192.168.8.221'
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))


def get_msg():
    global text_message
    while True:
        try:
            msg = s.recv(1024).decode('utf8')
            print(f"得到了一些消息:{msg}")
            text_message.insert(tk.END, msg)  # 接收到广播信息时显示在消息窗口
        except (BaseException, Exception) as e:
            print(traceback.format_exc())

            break



# 绘制GUI
app = tk.Tk()
app.title('多人聊天室')

# 消息窗口
message_frame = tk.Frame(width=480, height=300, bg='white')  # 划分Frame
text_message = tk.Text(message_frame)
message_frame.grid(row=0, column=0, padx=3, pady=6)  # 0行0列,边框距离x=3px,y=6px
message_frame.grid_propagate(0)  # 固定面板大小
text_message.grid()

# 输入窗口
text_frame = tk.Frame(width=480, height=100)
text_text = tk.Text(text_frame)
text_frame.grid(row=1, column=0, padx=3, pady=6)
text_frame.grid_propagate(0)
text_text.grid()



# 发送按钮
def send():
    send_msg = text_text.get('0.0', tk.END)  # 获取输入窗口文本内容
    # print(send_msg)
    s.send(send_msg.encode())
    text_text.delete('0.0', tk.END)  # 清空输入窗口文本内容

receive_thread = Thread(target=get_msg)  # 开启线程用于接收广播信息
receive_thread.start()
print('连接服务器成功')

send_frame = tk.Frame(width=480, height=30)
button_send = tk.Button(send_frame, text='发送', command=send)  # 添加按钮并绑定发送功能
send_frame.grid(row=2, column=0, padx=10, sticky='E')  # 2行0列,右对齐,距离边框10px
# send_frame.grid_propagate(0)
button_send.grid()

app.mainloop()

最后我也是复制粘贴修改的,也支持下原创:Python实战 | socket+thinter 实现多人聊天室_socket实现多人聊天室图片-CSDN博客

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

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

相关文章

新能源钠离子电池污废水如何处理

钠离子电池作为一种新能源电池,已经展示出了广阔的应用前景。然而,随着其生产和使用规模的不断扩大,对其产生的污废水问题也变得越来越重要。如何处理新能源钠离子电池的污废水,已经成为一个必须解决的问题。 首先,我…

第二十五章 解析cfg文件及读取获得网络结构

网络结构 以YOLOv3_SPP为例 cfg文件 部分,只是用来展示,全部的代码在文章最后 [net] # Testing # batch1 # subdivisions1 # Training batch64 subdivisions16 width608 height608 channels3 momentum0.9 de…

基于STM32 +(NVIC)中断概念应用和控制方案

前言 本次我们学习一下STM32的中断控制器—— NVIC,控制着整个STM32芯片中断相关的功能,它跟Cortex-M3 内核紧密联系,是内核里面的一个外设。 本篇博客大部分是自己收集和整理,借鉴了很多大佬的图片和知识点整理,如有侵…

中科大蒋彬课题组开发 FIREANN,分析原子对外界场的响应

内容一览: 使用传统方法分析化学系统与外场的相互作用,具有效率低、成本高等劣势。中国科学技术大学的蒋彬课题组,在原子环境的描述中引入了场相关特征,开发了 FIREANN,借助机器学习对系统的场相关性进行了很好的描述。…

一文读懂:IOPS、延迟和吞吐量等存储性能指标

各位ICT的小伙伴们大家好呀, 在我们谈存储性能的时候,总会听到IOPS、延迟(Latency)、带宽(Bandwidth)、吞吐量(Throughput)以及响应时间(Response Time)等技…

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下: 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具,用于分析网络应用和网页,收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址,它将针对此页面运行一连…

Typora+PicGo+Minio搭建博客图床

文章目录 TyporaPicGoMinio搭建博客图床前言什么是图床?为什么需要图床?准备工作一、Typora二、Picgo1. 下载Picgo2. 下载node.js3. 下载minio插件 三、服务器端配置1. 添加端口到安全组2. 使用Docker安装minio3. 配置minio image-20231127175530696四、minio插件配置五、Typ…

Python入门04字符串

目录 1 字符串的定义2 转义字符3 字符串的常见方法4 分割字符串5 字符串反转6 字符串的链式调用7 格式化字符串8 多行字符串总结 1 字符串的定义 在Python中,字符串表示一个字符的序列,比如 str "hello,world"这里我们定义了一个字符串&…

SpringBoot 入门学习

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2 框架介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置…

STM32F103C8T6——4路PWM

//main()函数前面的extern TIM_HandleTypeDef htim2;extern TIM_HandleTypeDef htim3;//main()函数内部额外添加的HAL_TIM_Base_Start_IT(&htim2);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim2…

深度学习中小知识点系列(三) 解读Mosaic 数据增强

前言 Mosaic数据增强,这种数据增强方式简单来说就是把4张图片,通过随机缩放、随机裁减、随机排布的方式进行拼接。Mosaic有如下优点: (1)丰富数据集:随机使用4张图片,随机缩放,再随…

[ CSS ] 内容超出容器后 以...省略

内容超出容器后 以…省略 当前效果 代码 <template><div class"box">有志者&#xff0c;事竟成&#xff0c;破釜沉舟&#xff0c;百二秦关终属楚; 有心人&#xff0c;天不负&#xff0c;卧薪尝胆&#xff0c;三千越甲可吞吴</div> </templa…

【Proteus仿真】【Arduino单片机】蔬菜大棚温湿度控制系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DHT11温湿度传感器、按键、继电器、蜂鸣器、加热、水泵电机等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD160…

TikTok新媒体战略:数字时代的社交营销

引言 随着数字时代的来临&#xff0c;社交媒体已成为企业推广和品牌建设的关键平台之一。而在众多社交媒体中&#xff0c;TikTok以其独特的短视频形式和庞大的用户基数吸引了无数企业和个人创作者。本文将深入探讨TikTok新媒体战略&#xff0c;探讨在数字时代如何利用这一平台进…

距离向量路由协议——RIP

目录 动态路由动态路由简介为什么需要动态路由动态路由基本原理路由协议的分类 距离向量路由协议RIPv1 VS RIPv2RIP简介RIPv1的主要特征RIPv1的基本配置 VS RIPv2的基本配置RIP配置案例被动接口单播更新使用子网地址 动态路由 动态路由简介 为什么需要动态路由 如果采用静态…

3.3VPWM转24VPWM电路

一、MOS管导通原理。 MOS管的两个重要参数 VGS(th)&#xff1a;开启电压 VGS(off)&#xff1a;预夹断电压 VDS(max)漏源破坏电压 1、MOS管&#xff1a; 当0<VGS<VGS(th),MOS管关断。 当VGS>VGS(th)&#xff0c;VDS>0&#xff0c;NMOS管导通。 VGDVGS-VDS&#xff…

Python实现WOA智能鲸鱼优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

超全超实用行业解决方案合集,覆盖十大行业数据应用需求

现代企业面对复杂的业务需求&#xff0c;对数据分析的需求日益增加。 从实时销售到市场趋势&#xff0c;从客户行为到产品优化&#xff0c;每个环节都依赖于数据支持。然而&#xff0c;传统的数据分析平台常分散在不同系统和团队中&#xff0c;形成数据孤岛&#xff0c;降低了…

Python实现AI助手

目录 1.介绍 2.准备工作 (1)登录百度智能云 (2)创建应用 (3) 获取Key 3.代码实现 4.效果展示 1.介绍 本文将介绍使用python调用百度云千帆大语言模型的API实现一个简单的AI助手,并且将在本文的第三部分贴出完整源码,供学习交流! 如果你觉得本篇文章对你有用,希望你动动宝…

单片机毕设实物买的成品,论文是自己查资料和照着实物写的

单片机毕设实物买的成品&#xff0c;论文是自己查资料和照着实物写的&#xff0c;算学术不端吗&#xff1f; 很多人的想法可能是这样的&#xff1a; 一般来说&#xff0c;毕业论文是独立完成的学术研究&#xff0c;需要表明作者自己的思考和研究成果&#xff0c;应该包括自己的…