socketserver 和 事件Event

socketserver    处理socket服务端        # 服务端TCP:        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",9014),MyHandler,True)# 是否绑定 默认为True        server.serve_forever()

#客户端TCP:            import socket            client=socket.socket()            client.connect(("127.0.0.1",9014))            while True:                data=input(">>:")                client.send(data.encode("utf-8"))                dic=client.recv(1034)                print(dic.decode("utf-8"))

# 服务端UDP:            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对象,在udp中会自动获取客户端数据+客户端对象                    print(current_thread())                    while True:                        data = self.request[0]                        print(data.decode("utf-8"))                        self.request[1].sendto(data.upper(),self.client_address)                        break            server=socketserver.ThreadingUDPServer(("127.0.0.1",9014),MyHandler,True)# 是否绑定 默认为True            server.serve_forever()

客户端UDP:            import socket            client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)            # client.connect()            addr=("127.0.0.1",9014)            while True:                data=input(">>:")                client.sendto(data.encode("utf-8"),addr)                dic=client.recvfrom(1024)[0]                print(dic.decode("utf-8"))

#ThreadingUDPServer 在初始化的时候创建了socket对象    #serve_forever() 将socket注册到select(多路复用)    #select中返回一个ready 如果为True则可以处理 _handle_request_noblock 内部创建了MyHandler

#使用了socket OOP 多线程    #在正常开发中

#使用时的区别:        #ThreadingTCPServer            #handle 在连接成功时执行            #self.request 是客户端的socket对象

#ThreadingUDPServer            #handle 接受到数据执行时执行            #self.request 数据和服务器端的socket对象

Event  多线程知识点    事件是什么? 某件事情发生的信号    用来做什么? 在线程间通讯 然而线程间本来就可以相互通讯                 作用就只剩下简化代码了

线程间通讯的例子    服务器启动需要五秒    客户端启动后连接服务器    去连接服务器必须保证服务器已经开启成功了

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

注意 Event线程通讯 仅仅用于简单的条件判断 说白就是代替bool类型 和if判断类似    set() 将状态修改为True    wati() 等待状态为True才能继续执行

举例:    实现相同效果的代码对比:        import time        from threading import Thread,Event #事件        event=Event()        # boot=False        def server_task():            global boot            print("正在启动....")            time.sleep(5)            print("启动...成功")            event.set()            # boot=True

def client_task():            event.wait() # 一个阻塞的函数 会阻塞直到对evernt执行set函数为止            print("连接成功")            # while True:            #     time.sleep(1)            #     print("连接服务器")            #     if boot:            #         print("连接成功")            #         break            #     else:            #         print("连接失败,服务器没有启动")

t1=Thread(target=server_task)        t2=Thread(target=client_task)        t1.start()        t2.start()        # t1.join()        # t2.join()

原文地址:https://www.cnblogs.com/yanhui1995/p/9962721.html

时间: 2024-08-09 17:31:03

socketserver 和 事件Event的相关文章

μCOS-II系统之事件(event)的使用规则及Semaphore实例

*************************************************************************************************************************** 作者:EasyWave                                                时间:2014.05.31 类别:μC/OS-II-操作系统                                  声明:

μCOS-II系统之事件(event)的使用规则及Semaphore的互斥量用法

*************************************************************************************************************************** 作者:EasyWave                                                时间:2014.05.31 类别:μC/OS-II-操作系统                                  声明:

μCOS-II系统之事件(event)的使用规则及MUTEX实例

*************************************************************************************************************************** 作者:EasyWave                                                时间:2014.05.31 类别:μC/OS-II-操作系统                                  声明:

学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcElement(触发事件的事件源对象)和attachEvent("onclick",function(){...}); 2. a. 实现拖放(Drag and Drop): 目前支支持IE, 若定制某对象为可拖放对象, 则必须覆盖目标对象的dragenter和dragover事件, 可以用e

[数据库] Navicat for MySQL事件Event实现数据每日定期操作

在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如:        (1).每天凌晨12点对数据库进行定时备份,结算和汇总:        (2).每天凌晨2点删除数据库前三天的数据:        (3).插入某个数据超过一定时间改变某个值的状态,比如预警系统.        这里就需要通过Event事件进行简单操作,下面将详细处理.你可能会想到通过触发器实现,但是如果是同一张表Insert插入数据后,但是触发器再进行Update更新操作是不行的,所以需要尝试通过Event

重温委托(delegate)和事件(event)

1.delegate是什么 某种意义上来讲,你可以把delegate理解成C语言中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作参数传递. 不过delegate和函数指针还是有点区别的,delegate有许多函数指针不具备的优点. 首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数.在引 用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的

【温故知新】c#事件event

从上一篇文章[温故知新]C#委托delegate可知,委托delegate和事件Event非常的相似,区别就是event关键字,给delegate穿上了个“马甲”. 让我们来看官方定义: 类或对象可以通过事件向其他类或对象通知发生的相关事情. 发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”. event 关键字用于在发行者类中声明事件. 定义非常明确,通过事件向其他类或对象通知发生的相关事情,用来实现的观察者模式. 还是通过之前的代码例子,看看声明delegate和ev

C#:代表(delegate)和事件(event) (转)

代表(delegate): 它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现.下面来看看它的实现步骤: 声明一个delegate对象. 实现和delegate具有相同参数和返回值的函数实现(可以是静态和非静态的). 产生一个delegate对象的时候,把你刚刚实现的函数作为参数传给他的构造函数. 请看下面例子: using System;using System.Collections.Generic;using System.Text; namespace U

C#事件(event)解析

事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要,其实C#事件就是基于windows消息处理机制的,只是封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于事件的应用程序来. 先来看看事件编程有哪些好处. 在以往我们编写这类程序中,往往采用等待机制,为了等待某件事情的发生,需要不断地检测某些判断变量,而引入事件编程后,大大简化了这种过程: - 使用事件,可以很方