Python3 notes

简介: Python3 notes

用socket实现的一个简易聊天室功能,支持@用户私聊。

服务端代码:

import socket

import threading


# 客户端地址 名称

addr_name ={}


# 所有客户端

all_clients =[]


# 名称 客户端

name_client ={}


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


host = socket.gethostname()


port =9999


server.bind((host, port))


server.listen(5)


lock= threading.Lock()


print("开启聊天室")



def handle_sock(sock, addr):

   whileTrue:

       try:

           data = sock.recv(1024)

           msg = data.decode("utf-8")

           print("send msg")

           from_name = addr_name[str(addr)]

           if msg.startswith('@'):

               index = msg.index(' ')

               # 私聊人                

               to_name = msg[1:index]

               # 接收者客户端              

               to_sock = name_client[to_name]

               # 发送的消息                

               to_msg = msg[index:]

               send_one(to_sock, addr, from_name +":"+ to_msg)

           else:

               # 群发消息                

               send_all(all_clients, addr, from_name +":"+ msg)

       exceptConnectionResetError:

           exit_name = addr_name[str(addr)]

           exit_client = name_client[exit_name]

           all_clients.remove(exit_client)

           msg = exit_name +" 退出了群聊"          

           send_all(all_clients, addr, msg)

           break



def send_all(socks, addr, msg):

   for sock in socks:

       sock.send(msg.encode("utf-8"))



def send_one(sock, addr, msg):

   sock.send(msg.encode("utf-8"))



whileTrue:

   sock, addr = server.accept()

   name = sock.recv(1024).decode("utf-8")

   addr_name[str(addr)]= name

   name_client[name]= sock

   all_clients.append(sock)

   hello = name +"加入了聊天室"    

   send_all(all_clients, addr, hello)

   client_thread = threading.Thread(target=handle_sock, args=(sock, addr))

   client_thread.start()

客户端代码:

import socket

import threading


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


host = socket.gethostname()


port =9999s.connect((host, port))

name ="cc"

s.send(name.encode("utf-8"))



def receive_handle(sock, addr):

   whileTrue:

       data = sock.recv(1024)

       print(data.decode("utf-8"))


# 开启线程监听接收消息

receive_thread = threading.Thread(target=receive_handle, args=(s,'1'))

receive_thread.start()


whileTrue:

   re_data = input()

   s.send(re_data.encode("utf-8"))

相关文章
|
8月前
|
移动开发 Python
Python3 notes
Python3 notes
|
8月前
|
JavaScript 前端开发 索引
ES6学习之字符串
ES6学习之字符串
|
SQL 关系型数据库 MySQL
MS SQL 表字段增加,删除,修改
1.表字段添加 格式:ALTER TABLE table_name ADD column_name data_type 设置默认值: ALTER TABLE table_name ADD COLUMN column_name VARCHAR (10)  NOT NULL  WITH DEFAULT '02'   MSSQL常用收集Int IDENTITY (1, 1) NOT
1400 0
|
12天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201894 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
4天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
|
1天前
|
供应链 监控 安全
|
4天前
|
SQL 安全 前端开发
预编译为什么能防止SQL注入?
SQL注入是Web应用中常见的安全威胁,攻击者通过构造恶意输入执行未授权的SQL命令。预编译语句(Prepared Statements)是一种有效防御手段,它将SQL代码与数据分离,确保用户输入不会被解释为SQL代码的一部分。本文详细介绍了SQL注入的危害、预编译语句的工作机制,并结合实际案例和多语言代码示例,展示了如何使用预编译语句防止SQL注入,强调了其在提升安全性和性能方面的重要性。
|
7天前
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
398 34
Qwen2.5-7B-Instruct Lora 微调