python聊天室

news2024/11/16 16:43:43

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参与群聊。

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

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

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

相关文章

一个 .net 8 + Azure 登录 + Ant Design Blazor 的基本后台框架

一个 .net 8 Azure 登录 Ant Design Blazor 的基本后台框架 主界面使用了 Ant Design Blazor 项目模板搭建 后台技术是 .net 8 Blazor run at server 模式 登录方式使用 Azure 实现了菜单导航和路由 此外实现了读取和修改本地Json文件的功能,不是必须的&#x…

【Python】OPC UA模拟服务器实现

目录 服务器模拟1. 环境准备2. 服务器设置3. 服务器初始化4. 节点操作5. 读取CSV文件6. 运行服务器 查看服务器客户端总结 在工业自动化和物联网(IoT)领域,OPC UA(开放平台通信统一架构)已经成为一种广泛采用的数据交换…

Leo赠书活动-24期 【三大层次学习企业架构框架TOGAF】文末送书

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

鸿蒙开发岗突增!它和前端开发到底有哪些区别和联系?

2024年1 月 18 日,鸿蒙 Next 预览版面向开发者正式开放申请。至此,鸿蒙原生应用版图已成型,这个中国自主研发的操作系统,正式走上了独立之路。 有许多的公司都陆续地加入了鸿蒙原生应用开发的队列,从年初宣布的200个应…

网络基础-基于TCP协议的Socket通讯

一、Socket通讯基于TCP协议流程图 UDP 的 Socket 编程相对简单些不在介绍。 二、 服务端程序启动 服务端程序要先跑起来,然后等待客户端的连接和数据。 服务端程序首先调用 socket() 函数,创建网络协议为 IPv4,以及传输协议为 TCP 的…

基于数据库现有表导出为设计文档

1.查询 SELECTCOLUMN_NAME 字段名,COLUMN_COMMENT 字段描述,COLUMN_TYPE 字段类型,false as 是否为主键 FROMINFORMATION_SCHEMA.COLUMNS wheretable_NAME region -- 表名2.查询结果 3.导出为excel

求交错且分母为阶乘的和(java)

import java.util.*; public class APP1{public static void main(String[] args){double sum0.0;int n0;int flag1;int fm1;Scanner reader new Scanner(System.in);System.out.println("请输入n的值&#xff1a;");nreader.nextInt();for(int i0;i<n;i){fm*i; …

【笔试训练】day5

今天的题&#xff0c;最后一题忘公式了&#xff0c;卡了一会推出来了 1、游游的you 思路&#xff1a; 看清题目意思就行&#xff0c;这里的相邻两个o可以重复算&#xff0c;也就是说&#xff0c;“ooo”算2分。 先算you的得分&#xff0c;再算oo 对了&#xff0c;不开long lo…

图神经网络实战——利用节点回归预测网络流量

图神经网络实战——利用节点回归预测网络流量 0. 前言1. 数据集分析2. 实现 GCN 模型执行节点回归3. 模型测试相关链接 0. 前言 在机器学习中&#xff0c;回归指的是对连续值的预测。通常与分类形成鲜明对比&#xff0c;分类的目标是找到正确的类别(即离散值&#xff0c;而非连…

C++_智能指针

文章目录 前言一、智能指针原理二、库支持的智能指针类型1.std::auto_ptr2.std::unique_ptr3.std::shared_ptr4.std::weak_ptr 三、删除器总结 前言 智能指针是一种采用RAII思想来保护申请内存不被泄露的方式来管理我们申请的内存&#xff0c;对于RAII&#xff0c;我们之前也已…

这是刚发布的人形机器人?不,分明是《午夜凶铃》现实版

波士顿动力公司大名鼎鼎的人形机器人Atlas&#xff0c;你一定见识过吧。 Atlas可以像人一样行走、奔跑和攀爬 | 波士顿动力公司 这款用液压系统打造的机器人产品&#xff0c;经过十多年的调试升级&#xff0c;才终于拥有了人类一般灵活的身手。在波士顿动力公司历年来放出的视频…

OpenHarmony UI开发-ohos-svg

简介 ohos-svg是一个SVG图片的解析器和渲染器&#xff0c;解析SVG图片并渲染到页面上。它支持大部分 SVG 1.1 规范&#xff0c;包括基本形状、路径、文本、样式和渐变,它能够渲染大多数标准的 SVG 图像。ohos-svg的优点是性能好、内存占用低。 效果展示 SVG图片解析并绘制: …

第七周学习笔记DAY.4-方法重写与多态

学完本次课程后&#xff0c;你能够&#xff1a; 实现方法重写 深入理解继承相关概念 了解Object类 会使用重写实现多态机制 会使用instanceof运算符 会使用向上转型 会使用向下转型 什么是方法重写 方法的重写或方法的覆盖&#xff08;overriding&#xff09; 1.子类根据…

【STM32CubeIDE 1.15.0】汉化包带路径配置过程

一、IDE软件下载 二、汉化版包路径 三、IDE软件板载汉化包 一、IDE软件下载 ST官网IDE下载链接 二、汉化版包路径 https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/ 找不到就到.cn后面一级一级进 三、IDE软件板载汉化包 https://mirrors.ustc.edu…

Jmeter 压测-Jprofiler定位接口相应时间长

1、环境准备 执行压测脚本&#xff0c;分析该接口tps很低&#xff0c;响应时间很长 高频接口在100ms以内&#xff0c;普通接口在200ms以内 2、JProfiler分析响应时间长的方法 ①JProfiler录制数据 压测脚本&#xff0c;执行1-3分钟即可 ②分析接口相应时间长的方法 通过Me…

Django之rest_framework(四)

扩展的视图类介绍 rest_framework提供了几种后端视图(对数据资源进行增删改查)处理流程的实现,如果需要编写的视图属于这几种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量 官网:3 - Class based views - Django REST framework rest_framework.mixi…

cobaltstrike 流量隐藏

云函数 新建一个云函数&#xff0c;在代码位置进行修改 首先导入 yisiwei.zip 的云函数包 PYTHON # -*- coding: utf8 -*- import json, requests, base64def main_handler(event, context):C2 https://49.xx.xx.xx # 这里可以使用 HTTP、HTTPS~下角标~ path event[path]h…

在Windows 11/10/8中打开计算机管理的几种方法,总有一种适合你

序言 计算机管理是Windows中一个功能强大的工具,允许你管理和监视计算机系统的各个方面。使用“计算机管理”,你可以快速访问“设备管理器”、“磁盘管理”、“本地用户管理”等。本文将向你展示如何在Windows 11/10/8中打开“计算机管理器”。 网上有很多方法可以打开计算…

Spring Security详细学习第一篇

Spring Security 前言Spring Security入门编辑Spring Security底层原理UserDetailsService接口PasswordEncoder接口 认证登录校验密码加密存储退出登录 前言 本文是作者学习三更老师的Spring Security课程所记录的学习心得和笔记知识&#xff0c;希望能帮助到大家 Spring Sec…

单分支:if语句

示例&#xff1a; /*** brief how about if? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <stdio.h>#define if_state…