当前位置:首页 > 科技  > 软件

Python系列:摸鱼小利器,使用Python创建一个聊天室

来源: 责编: 时间:2024-01-18 17:35:43 140观看
导读上班是帮老板赚钱,摸鱼才是赚老板的钱。日常摸鱼跟小伙伴聊天是我们经常干的事儿,但是对于有些位置不好的同学,背对领导或者坐在过道中的,就需要时刻盯防经过的人,以防自己上班聊天划水摸鱼被抓现行,那么今天就来介绍如何使

上班是帮老板赚钱,摸鱼才是赚老板的钱。n2G28资讯网——每日最新资讯28at.com

日常摸鱼跟小伙伴聊天是我们经常干的事儿,但是对于有些位置不好的同学,背对领导或者坐在过道中的,就需要时刻盯防经过的人,以防自己上班聊天划水摸鱼被抓现行,那么今天就来介绍如何使用Python创建一个聊天室。n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

socket介绍

在网络编程中,Socket 是一种通信机制,允许计算机在网络上相互通信。Python 中的 socket 库提供了一种简单而强大的方式来创建网络应用程序,本文将介绍socket库的基本概念、创建和使用套接字(Socket)的方法以及一些常见的网络编程用例。n2G28资讯网——每日最新资讯28at.com

基本概念

Socket 是一种通信的端点,可以通过网络发送和接收数据。在网络编程中,通常使用两种类型的Socket:服务器端套接字和客户端套接字。服务器端套接字等待来自客户端的连接请求,而客户端套接字尝试与服务器端建立连接。n2G28资讯网——每日最新资讯28at.com

创建服务器

import socket# 创建服务器端套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定地址和端口server_address = ('localhost', 8888)server_socket.bind(server_address)# 监听连接请求server_socket.listen(5)print('Waiting for client to connect...')# 接受客户端连接client_socket, client_address = server_socket.accept()print('Connection from:', client_address)# 接收数据data = client_socket.recv(1024)print('Received:', data.decode())# 发送数据message = 'Hello, client!'client_socket.send(message.encode())# 关闭连接client_socket.close()server_socket.close()

通过上面的代码我们成功出创建了一个聊天室的服务器,其中的ip可以替换成你自己电脑的ip地址,这样比人就可以通过IP:Port来链接你的电脑。n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

运行后我们可以看到服务器目前正在等待连接中,接下来我们就创建客户端来链接服务器。n2G28资讯网——每日最新资讯28at.com

创建客户端

import socket# 创建客户端套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器server_address = ('localhost', 8888)client_socket.connect(server_address)# 发送数据message = 'Hello, server!'client_socket.send(message.encode())# 接收数据data = client_socket.recv(1024)print('Received:', data.decode())# 关闭连接client_socket.close()

通过上面的代码我们已经成功创建好了客户端,链接服务器地址哪里修改成服务器的对应IP和端口就行了,接下来我们就来链接服务器。n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

可以看到运行客户端后我们可以看到服务端和客户端都有反应,服务端收到客户端的连接后发送了一天消息,客户端同时也收到了服务端发来的消息,这两条消息是我们指定的,并且发送一条后聊天室就关闭,接下来我们来优化一下n2G28资讯网——每日最新资讯28at.com

保持聊天室长连接

这里我们使用多线程来创建一个持久性连接的聊天室。n2G28资讯网——每日最新资讯28at.com

服务器:n2G28资讯网——每日最新资讯28at.com

import socketimport threadingdef handle_client(client_socket):    while True:        # 接收客户端消息        data = client_socket.recv(1024)        if not data:            break  # 如果客户端断开连接,退出循环        message = data.decode()        print(f"Received from {client_socket.getpeername()}: {message}")        # 广播消息给所有客户端        broadcast(message, client_socket)    # 关闭连接    print(f"Connection from {client_socket.getpeername()} closed.")    clients.remove(client_socket)    client_socket.close()def broadcast(message, sender_socket):    for client in clients:        if client != sender_socket:            try:                client.send(message.encode())            except:                # 如果发送失败,说明客户端已断开连接,移除该客户端                clients.remove(client)# 创建服务器端套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定地址和端口server_address = ('localhost', 8888)server_socket.bind(server_address)# 监听连接请求server_socket.listen(5)print('Waiting for clients to connect...')# 存储所有客户端套接字的列表clients = []while True:    # 接受客户端连接    client_socket, client_address = server_socket.accept()    print(f"Connection from {client_address} established.")    # 存储客户端套接字到列表    clients.append(client_socket)    # 创建一个线程来处理客户端    client_handler = threading.Thread(target=handle_client, args=(client_socket,))    client_handler.start()

客户端:n2G28资讯网——每日最新资讯28at.com

import socketimport threadingdef receive_messages():    while True:        try:            # 接收服务器端消息            data = client_socket.recv(1024)            if not data:                break  # 如果服务器端断开连接,退出循环            message = data.decode()            print("Received:", message)        except:            break# 创建客户端套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器server_address = ('localhost', 8888)client_socket.connect(server_address)# 创建一个线程来接收服务器端消息receive_thread = threading.Thread(target=receive_messages)receive_thread.start()# 发送消息到服务器while True:    message = input("我是客户端1: ")    client_socket.send(message.encode())

这里注意,服务器和客户端是存在不同的py文件中的,就是说如果几个人中需要一个人创建服务区和聊天室的话就需要创建两个py文件。n2G28资讯网——每日最新资讯28at.com

然后其他小伙伴就只需要创建一个聊天室就行了,在客户端中的message标明你是谁就行,接下来我们开始实验。n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

n2G28资讯网——每日最新资讯28at.com

这里可以看到我们成功搭建了一个微型聊天室,每个客户端都能收到其他客户发送的消息,而服务端可以看到所有客户端所发送的消息。n2G28资讯网——每日最新资讯28at.com

以上就是使用Python中的socket库搭建一个微型的聊天室,在里面不仅可以进行实时聊天,还可以传送文件、远程命令执行或者联网小游戏。n2G28资讯网——每日最新资讯28at.com

当然我给出的示例只是一个简单的多线程聊天室的示例,只是用于娱乐,如果想要在项目中实际应用则需要考虑到更多的安全性和错误的处理,如果需要更高级的异步处理,还会用到asyncio。n2G28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-64503-0.htmlPython系列:摸鱼小利器,使用Python创建一个聊天室

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 生成式 AI 带给软件开发的三个幻觉:速度快、质量高、人更少

下一篇: C++中的引用详解

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 使用AIGC工具提升安全工作效率

    使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top