#基于udp协议通讯的套接字
# 数据报协议
# 一个recvfrom对应一个sendto 一一对应 无粘包产生
# 服务端:
# import socket
# server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# server.bind(("127.0.0.1",8080))
# while True:
# date,mag=server.recvfrom(1024)
# print(date)
# server.sendto(date.upper(),mag)
# server.close
#
# 客户端
# import socket
# client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# while True:
# res=input(">>").strip()
# client.sendto(res.encode("utf-8"),("127.0.0.1",8080))
# date,server_addr=client.recvfrom(1024)
# print(date)
# client.close()
#
#TCP协议的优缺点:(流式协议)
# 优点:传输数据可靠
# 缺点:传输效率慢
#UDP协议的优缺点:(数据报协议)
# 优点:传输数据的效率高
# 缺点:数据容易丢失 可靠性低
# socketserver模块的使用
# 基于tcp协议通讯,仅更改服务端即可
# tcp协议并发的socketserver模板:
# import socketserver
# 自定义类用来处理通讯循环
# class MyTCPhanler(socketserver.BaseRequestHandler):
# def handle(self):
# while True:
# try:
# data=self.request.recv(1024)#request相当于建立连接
# if len(data)==0:break
# print("----->收到客户消息",data)
# self.request.send(data.upper())
# except ConnectionError:
# break
# self.request.close()
# pass
# if __name__ == '__main__':
# server=socketserver.ThreadingTCPServer(("127.0.0.1",8080),MyTCPhanler)
# server.serve_forever() #连接循环
# 基于udp协议并发的socketserver模板:
# 服务端:
# import socketserver
# # 自定义类用来处理通讯循环
# class MyUDPhanler(socketserver.BaseRequestHandler):
# def handle(self):
# data,sock=self.request
# sock.sendto(data.upper(),self.client_address)
# if __name__ == '__main__':
# server=socketserver.ThreadingUDPServer(("127.0.0.1",8080),MyUDPhanler)
# server.serve_forever() #连接循环
#什么是进程
#进程的概念:起源于操作系统
#正在进行(运行)的程序
#进程是一个包含程序运行所需的所有资源的单位
#在只有一个CPU的情况下
#是因为有多道技术
#内存被分为多个区域 存放不同的应用程序
#当一个应用程序遇到了I/O操作时 炒作系统会将CPU非陪给其他的应用程序使用
#切换的时间非常短 用户是感觉不到的
#特点:
#一个操作系统中可以同时存在多个进程
#内部使用了多道技术 可以快速的在不同的应用程序间切换 给用户的感觉就像是在同时运行
#进程是一个包含程序运行所需的所有资源的单位