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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

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

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