一、基于UDP的套接字
UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。
服务端
import socket
IP='127.0.0.1'
PORT=8080
ADDRESS=(IP,PORT)
BUFFSIZE=1024
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind(ADDRESS)
while True:
data,addr=server.recvfrom(BUFFSIZE)
print('>>>>',data.decode('utf-8'))
server.sendto(data.upper(),addr)
server.close()
客户端
import socket
IP = '127.0.0.1'
PORT = 8080
ADDRESS = (IP, PORT)
BUFFSIZE = 1024
client = 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(BUFFSIZE)
print(data)
client.close()
二、socketserver模块
SocketServer 模块是一个基于 socket 模块的高级别的套接字通讯模块,用于简化网络客户与服务器的实现,它支持使用多进程或多线程处理客户端请求。
基于TCP的使用
服务端
import socketserver
IP = '127.0.0.1'
PORT = 8082
ADDRESS = (IP, PORT)
BUFFSIZE = 1024
class MyTcphandle(socketserver.BaseRequestHandler):
def handle(self):
while True:#通信循环
try:
data=self.request.recv(BUFFSIZE)
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()#链接循环
客户端(没有变化)
import socket
IP = '127.0.0.1'
PORT = 8082
ADDRESS = (IP, PORT)
BUFFSIZE = 1024
client=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(BUFFSIZE)
print(data.decode('utf-8'))
client.close()
基于UDP的使用
服务端
import socketserver
IP = '127.0.0.1'
PORT = 8082
ADDRESS = (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不需要链接,只有通信循环
客户端(没有变化)
import socket
IP = '127.0.0.1'
PORT = 8082
ADDRESS = (IP, PORT)
BUFFSIZE = 1024
client = 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(BUFFSIZE)
print(data)
client.close()
三、进程简单介绍
1 什么是进程
进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念
进程vs程序
程序:一堆代码
进程:程序的执行的过程
进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来
操作系统理论:
1. 操作系统是什么?
操作系统是一个协调\管理\控制计算机硬件资源与应用软件资源的一段控制程序
有两大功能:
1. 将复杂的硬件操作封装成简单的接口给应用程序或者用户去使用
2. 将多个进程对硬件的竞争变得有序
2.操作系统发展史
串行:一个任务完完整整地运行完毕,才能运行下一个任务
并发: 多个任务看起来是同时运行的
多道技术:(复用=>共享/共用)
1. 空间上的复用:多个任务复用内存空间
2. 时间上的复用:多个任务复用cpu的时间
注:两种情况下,一个进程会被操作系统剥夺cpu的执行权限
1. 一个任务占用cpu时间过长:比起串行执行反而会降低效率
2. 一个任务遇到io操作:比起串行执行可以提升效率