博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day33、基于udp的套接字、socketserver模块、关于进程的简单介绍
阅读量:4967 次
发布时间:2019-06-12

本文共 3409 字,大约阅读时间需要 11 分钟。

一、基于UDP的套接字

UDP协议:

  UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议

UDP套接字示例:

服务端:

import socketserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # SOCK_DGRAM基于UDP协议server.bind(('127.0.0.1', 8765))while True:    data, client_addr = server.recvfrom(1024)    print(data.decode('utf-8'))    server.sendto(data.upper(), client_addr)server.close()

客户端:

import socketclient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#SOCK_DGRAM基于UDP协议while True:    msg = input(">>:").strip()    client.sendto(msg.encode('utf-8'),('127.0.0.1',8765))    data,server_addr = client.recvfrom(1024)    print(data.decode('utf-8'))

二、socketserver模块

socketserver模块简化了编写网络服务程序的任务,是python标准库中很多服务器框架的基础。

socketserver中包含了两种类,一种为服务类(server class),一种为请求处理类(request handle class),前者主要做的是建立链接的过程,后者注重用户数据的处理

要实现一项服务,还必须派生一个handler class请求处理类,并重写父类的handle()方法。handle方法就是用来专门是处理请求的。该模块是通过服务类和请求处理类组合来处理请求的。SocketServer模块提供的请求处理类有BaseRequestHandler。

1、基于tcp协议通信:

服务端:

import socketserverIP = '127.0.0.1'PORT = 8082ADDRESS = (IP, PORT)BUFSIZE = 1024class MyTcphandle(socketserver.BaseRequestHandler):    def handle(self):        while True:#通信循环            try:                data=self.request.recv(BUFSIZE)                if not data:                    print('客户端断开。。。')                    break                print('>>',data.decode('utf-8'))                self.request.send(data.upper())            except ConnectionResetError:                break        self.request.close()if __name__ == '__main__':    server=socketserver.ThreadingTCPServer(ADDRESS,MyTcphandle)    server.serve_forever()#链接循环
View Code

客户端:

import socketIP = '127.0.0.1'PORT = 8082ADDRESS = (IP, PORT)BUFSIZE = 1024client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.connect(ADDRESS)while True:    msg=input('>>>').strip()    if len(msg)==0:continue    client.send(msg.encode('utf-8'))    data=client.recv(BUFSIZE)    print(data.decode('utf-8'))client.close()
View Code

2、基于udp协议通信:

服务端:

import socketserverIP = '127.0.0.1'PORT = 8082ADDRESS = (IP, PORT)class MyUdphandle(socketserver.BaseRequestHandler):    def handle(self):        data,sock=self.request        sock.sendto(data.upper(),self.client_address)if __name__ == '__main__':    server=socketserver.ThreadingUDPServer(ADDRESS,MyUdphandle)    server.serve_forever()#由于UDP不需要链接,只有通信循环
View Code

客户端:

import socketIP = '127.0.0.1'PORT = 8082ADDRESS = (IP, PORT)BUFSIZE = 1024client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)while True:    msg=input('>>>').strip()    if len(msg)==0:continue    client.sendto(msg.encode('utf-8'),ADDRESS)    data,addr=client.recvfrom(BUFSIZE)    print(data)client.close()
View Code

三、关于进程的简单介绍

什么是进程:

  进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念

  进程vs程序

  程序:一堆代码
  进程:程序的执行的过程

  进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来

操作系统理论:

    1. 操作系统是什么?
      操作系统是一个协调\管理\控制计算机硬件资源与应用软件资源的一段控制程序
      有两大功能:
      1. 将复杂的硬件操作封装成简单的接口给应用程序或者用户去使用
      2. 将多个进程对硬件的竞争变得有序

    2.操作系统发展史

      串行:一个任务完完整整地运行完毕,才能运行下一个任务

      并发: 多个任务看起来是同时运行的
      

      多道技术:(复用=>共享/共用)

        1. 空间上的复用:多个任务复用内存空间
        2. 时间上的复用:多个任务复用cpu的时间

        注:两种情况下,一个进程会被操作系统剥夺cpu的执行权限

          1. 一个任务占用cpu时间过长:比起串行执行反而会降低效率

          2. 一个任务遇到io操作:比起串行执行可以提升效率

转载于:https://www.cnblogs.com/Mister-JH/p/9588295.html

你可能感兴趣的文章
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(3)——webpack基础
查看>>
前端利器躬行记(4)——webpack进阶
查看>>
前端利器躬行记(5)——Git
查看>>
前端利器躬行记(6)——Fiddler
查看>>
每次阅读外文技术资料都头疼,终于知道原因了。
查看>>
zabbix短信网关调用问题总结
查看>>
130242014034-林伟领-实验一
查看>>
Forbidden You don't have permission to access / on this server.
查看>>
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
raspberry 安装apache2,使其支持ssl ,并创建自签名证书
查看>>
Trie树:应用于统计和排序
查看>>
C语言结构体和函数
查看>>
[BZOJ3449] [Usaco2014 Feb]Secret Code
查看>>
XHTML与HTML区别
查看>>
软考-程序设计语言基础(编译原理)
查看>>