CS/BS架构
1.基于TCP的socket服务端和客户端
2.加入链接循环
3.加入通信循环
http的默认端口80
https的默认端口443
先从服务器端说起。
服务器端先初始化Socket,
然后与端口绑定(bind),
对端口进行监听(listen),
调用accept阻塞,等待客户端连接。
在这时如果有个客户端初始化一个Socket,
然后连接服务器(connect),如果连接成功,
这时客户端与服务器端的连接就建立了。
客户端发送数据请求,服务器端接收请求并处理请求,
然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束.
TCP服务端 socket --> bind --> listen --> accept -->read -->write -->read -->close
TCP客户端 socket --> connect --> write --> read --> close
# 获取tcp/ip套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取udp/ip套接字
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
bind 绑定ip或端口
listen 监听客户端
accept 接收
传递结束关闭当前工作的客户端
tcp
# 服务端
# # 服务端
# import socket
# # 第一个socket是模块名,第二个是类名
# # SOCK_STREAM ==> 基于TCP协议写的
# server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
#
# # 不传就代表tcp协议
# # server = socket.socket()
#
# # 绑定监听地址 http的默认端口80 https的默认端口443
# server.bind((‘127.0.0.1‘,8080))
#
# # listen监听,半连接池 ps:不是同时服务5个
# server.listen(5)
#
# # 接收消息
# print(‘正在接受客户端信息:‘)
# while True:
# # sock 当前连接对象 addr 客户端的地址 ip+端口port
# sock, addr = server.accept()
# print(sock)
# print(addr)
#
# while True:
# try:
# # 1024 bytes 最多接收1024字节
# data = sock.recv(1024)
# if len(data) == 0:
# break
# print(data)
#
# sock.send(data.upper())
# except Exception as e:
# print(e)
# break
# sock.close()
#
# server.close()
# 客户端
# import socket
#
# client = socket.socket()
#
# client.connect((‘1027.0.0.1‘,8080))
# while True:
# input_data = input(‘请输入要传输的数据:(q to quit)‘).strip()
#
# if not input_data:continue
#
# if input_data == ‘q‘:
# break
#
# client.send(input_data.encode(‘utf-8‘))
#
# data = client.recv(1024)
# print(data)
#
# client.close()
udp
服务端
import socket
# SOCK_DGRAM =》 udp服务端
# SOCK_STREAM =》 tcp服务端
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind((‘127.0.0.1‘, 8080))
while True:
# client_addr: 客户端地址
data, client_addr = server.recvfrom(1024)
print(data)
print(client_addr)
server.sendto(data.upper(), client_addr)
server.close()
客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
while True:
msg = input(‘>>: ‘).strip() # msg=‘‘
client.sendto(msg.encode(‘utf-8‘), (‘127.0.0.1‘, 8080))
# 接收服务端返回的数据
data, server_addr = client.recvfrom(1024)
print(data)
client.close()
进程
进程的概念
进程是系统进行资源分配和调度的基本单位
程序和进程:
程序是静态的,没有生命周期
进程是动态的,是有生命周期的
协程
进程是操作系统分配资源的基本单位,线程是操作系统执行的最小单位
进程不是实际干活的人,真正干活的是线程
一个程序中必须要有一个进程
一个进程必须要有一个线程
进程的三种状态:
就绪态:
运行态
阻塞态
进程调度:(了解)
先来先服务
短作业优先
时间片轮转法
i/o密集型
io阻塞
input
output
计算密集型 没有IO消耗