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


相关推荐

  • thinkphp使用PHPMailer发送邮件

    thinkphp使用PHPMailer发送邮件

    2021年9月21日
    41
  • 亲手撸了一个SpringBoot+Vue的企业级项目(附源码)

    简介 SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少…

    2021年6月23日
    116
  • 点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    点击table的td单元格出现dialog弹窗,获取值后将值放回td单元格

    2021年7月15日
    101
  • 怎样修改hosts文件权限_修改host显示没有权限怎么办

    怎样修改hosts文件权限_修改host显示没有权限怎么办文章目录1.打开host文件2.右键属性->安全->高级3.更改->高级->立即查找4.在下拉菜单中找到”本地账户”确定->确定->应用5.出现弹窗->确定->确定6.编辑->选中组或用户名当中的”Users(DESKTOP-XXXXX\users)”->勾选Users的权限下的:允许完全控制->点应用->确定即可修改hosts文件了。1.打开host文件文件位置C:\Windows\System32\drivers\etc

    2022年10月12日
    2
  • Java 三目运算符细节详解「建议收藏」

    Java 三目运算符细节详解「建议收藏」Java三目运算符细节详解@author:Jingdai@date:2020.09.24看到标题你肯定觉得三目运算符有什么好讲的,不是很简单嘛。我之前也是这么认为的,直到今天刷LeetCode遇到了一点问题,发现还是有些细节自己不知道的,现总结一下。短路问题首先我们都知道Java中&&和||的运算是具有短路效果的,如果逻辑运算符的第一部分能确定运算的结果,就不会再去计算逻辑运算符的第二部分,比如下面的代码,输出的i仍然是1,因为后面的运算短路了,没有计算。in

    2025年6月24日
    5
  • java标识符与关键字_4、Java标识符和关键字

    java标识符与关键字_4、Java标识符和关键字标识符:Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符。(凡是自己可以起名的地方都叫标识符,都遵循标识符的规则)Java的命名规则:1、标识符由字母、下划线”_”、美元符”$”或数字组成;2、标识符应以字母、下划线、美元符开头;3、Java标识符大小写敏感,长度无限制;4、Java标识符选取应注意“见明知意”且不能与Java语言的关键字重名(约定俗成)合法的标识符HelloWor…

    2022年7月7日
    19

发表回复

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

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