socker server和 event

socker server和 event今日内容 1 基于 TCP 的 socketserver 基于 UDP 的 socketserver event 一 TCP 的 socketserver 服务器 importsocket thread forklinux 下一个多进程接口 windows 没有这接口 用于处理请求的类

今日内容

1.基于TCP的socketserver

2.基于UDP的socketserver

3.event

一.TCP的socketserver

#服务器 import socketserver from threading import current_thread # fork linux下一个多进程接口 windows没有这接口 # 用于处理请求的类 class MyHandler(socketserver.BaseRequestHandler): def handle(self): print(self) print(self.server) # 获取封装的服务器对象 print(self.client_address)# 客户端地址 print(self.request)# 获取客户端的socket对象 print(current_thread()) while True: data = self.request.recv(1024) print(data.decode("utf-8")) self.request.send(data.upper()) server = socketserver.ThreadingTCPServer(("127.0.0.1",9999),MyHandler) server.serve_forever() 
#客户端

import socket




 

 

二.基于UDP的socketserver

# 服务器 import socketserver from threading import current_thread # fork linux下一个多进程接口 windows没有这接口 # 用于处理请求的类 class MyHandler(socketserver.BaseRequestHandler): def handle(self): print(self) print(self.server) # 获取封装的服务器对象 print(self.client_address)# 客户端地址 print(self.request)# 是一个元祖 包含收到的数据 和服务器端的socket # data,client = self.request  data = self.request[0] print(data.decode("utf-8")) self.request[1].sendto(b"i am server",self.client_address) server = socketserver.ThreadingUDPServer(("127.0.0.1",9999),MyHandler) server.serve_forever() # ThreadingUDPServer 在初始化的时候创建了socket对象 # serve_forever() 将sockt注册到select(多路复用的) # select中返回一个ready 如果为True则可以处理 _handle_request_noblock 内部创建了一个MyHandler的示例 调用了handler函数 # 使用了socket OOP 多线程 # 正常开发中 如果并发量不大 就是用socketserver # 否则用协程 """ 使用时的区别: ThreadingTCPServer handler 在连接成功时执行 self.request 是客户端的socket对象 ThreadingUDPServer handler 接收到数据时执行 self.request 数据和服务器端的socket对象 """ # 客户端 import socket c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) addr = ("127.0.0.1",9999) while True: msg = input(">>>:") c.sendto(msg.encode("utf-8"),addr) print(c.recvfrom(1024)[0].decode("utf-8"))

三.Event

是否启动完成就是要通讯的内容

“””

# import time # from threading import Thread # boot = False # def server_task(): # global boot # print("正在启动....") # time.sleep(5) # print("启动....成功") # boot = True # # def client_task(): # while True: # print("连接服务器....") # time.sleep(1) # if boot: # print("连接成功") # break # else: # print("error 连接失败 服务器未启动!!") # # t1 = Thread(target=server_task) # t1.start() # # t2 = Thread(target=client_task) # t2.start() # # t1.join() # t2.join() # 使用事件实现 import time from threading import Thread,Event event =Event() def server_task(): print("正在启动....") time.sleep(5) print("启动....成功") event.set() def client_task(): event.wait() #一个阻塞的函数 会阻塞直到对event执行set函数为止 print("连接成功!") t1 = Thread(target=server_task) t1.start() t2 = Thread(target=client_task) t2.start()

 

转载于:https://www.cnblogs.com/gongcheng-/p/9971476.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232533.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 话里话外:流程图绘制初级:六大常见错误

    话里话外:流程图绘制初级:六大常见错误

    2021年8月2日
    126
  • pycharm使用技巧及常用快捷键_pycharm快捷键大全图

    pycharm使用技巧及常用快捷键_pycharm快捷键大全图Pycharm常用快捷键1、编辑(Editing)Ctrl+Space基本的代码完成(类、方法、属性)Ctrl+Alt+Space快速导入任意类Ctrl+Shift+Enter语句完成Ctrl+P参数信息(在方法中调用参数)Ctrl+Q快速查看文档F1外部文档Shift+F1外部文档,进入web文档主页Ctrl+Shift+Z–>Redo重做Ctrl+鼠标简介/进入代码定义Ctrl+F1显示错误描述或警告.

    2022年8月26日
    5
  • Linux三剑客(grep、sed、awk)

    下面所说的是Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。在说这三个命令前我们要插入一个小插曲就是“正则表达式”。一、正则表达式所谓的正则表达式我个人理解就是正规的表示方法。他是用简…

    2022年4月4日
    83
  • 查看服务器硬件配置信息命令_服务器硬件参数

    查看服务器硬件配置信息命令_服务器硬件参数本次由于需要搭建一套环境,但是所需硬件配置不足,需要进行统计采购。那么就需要得知服务器现有配置,所以这次会介绍些常用的命令和工具来查询硬件信息。其实也可以通过像DELL厂商的IDRAC控制台来获取这些

    2022年8月2日
    12
  • Idea激活码永久有效Idea2021.3.1激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2021.3.1激活码教程-持续更新,一步到位Idea激活码永久有效2021.3.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.3.1成功激活

    2022年6月17日
    124
  • jetson nano安装pycuda

    jetson nano安装pycudaJetPack4.4版本使用之前配置cuda的环境$sudonano~/.bashrcexportPATH=/usr/local/cuda-10.2/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHexportCUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.2$sudosource~/.bashrc$nvcc-V检测一下是否配置成功之后下载[p

    2025年8月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号