CS/BS架构。。socket套接字

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消耗

CS/BS架构。。socket套接字

上一篇:minimsg升级扩展


下一篇:npm install -g @vue/cli 安装vue脚手架报错