概念
32位 我的ip
mac 地址
16个字节 数据大小
32位 我的ip
32位 端口
? mac 地址
应用层 (表示层) (会话层) python
传输层 port 四层路由器 四层交换机
网络层 ipv4 ipv6 路由器 三层交换机
数据链路 mac arp协议 网卡 二层交换机
物理层
服务端
import socket
sk=socket.socket()
# sk.bind(('192.168.2.154'))
sk.bind(('127.0.0.1',9001))
sk.listen()
conn,addr=sk.accept()
conn.send(b"hello")
msg=conn.recv(1024)
print(msg)
conn.close()
sk.close()
客户端
import socket
sk=socket.socket()
sk.connect(('127.0.0.1',9001))
msg=sk.recv(1024)
print(msg)
sk.send(b'bye')
sk.close()
tcp(语音聊天/视频聊天)-线下缓存高强电影\qq远程控制\发邮件
? 需要先建立连接 然后才能通信的
? 占用链接\可靠(消息不会丢失)\实时性高\慢
? 客户端 向服务器发送 syn请求
? 服务端向客户端回复ack 并发送syn请求
? 客户端接收到请求之后 再回复 ack 表示建立连接
? 由 客户端的 connect + 服务端的 accept
? 客户端向服务端发送 fin请求
? 服务端回复ack确认
? 服务端向客户端发送fin请求
? 客户端回复 ack确认
? 有客户端的 close 和服务端的close
什么事三次握手?什么是四次握手? 为什么是三次 挥手是四次 ? 这个过程传递了什么?
server---------client
udp(发消息)--在线播放视频.\qq发消息\微信消息
? 不需要建立连接 就可以通信
? 不占用连接\不可靠\消息因网络丢失不稳定\快
import sys
# import glance
# 导入一个包(文件夹) 相当于执行了 这个包下的 __init__ 文件
# 并不相当于把这个包所有的文件都导入进来了
#要想导入某个包的 (文件夹)下的文件
# 方式一 import as 语句
import glance.api.policy as policy
policy.get()
# 方式二
# from glance.api import policy 直接从一个包中导入文件
# policy.get()
# from glance.api.policy import get 直接从包的文件中导入函数名/变量名
# policy.get()
# from glance import api.policy #报错 from...import 后面不能带 .
# 进阶 先不学 day28 7.包的导入
import json
# 当你需要写一个功能
# 这个功能不是直接晕新的,而是被别人导入之后使用的,这种情况如果你的这个独立功能形成文件夹
# 文件夹内的所有文件都需要使用相对导入
#
#
# 但是如果我们自己开发一个项目,这个项目有一些文件是直接运行的,这种情况不适合相对导入
# 适合用绝对导入
# 进阶 https://www.cnblogs.com/Eva-J/articles/7292109.html
# 绝对导入 相对导入
class Student():
def __init__(self,name):
self.name=name
class Course():
def __init__(self,name,price,period,teacher):
self.name=name
self.price=name
self.period=name
self.teacher=teacher
class Admin():
def __init__(self,name):
self.name=name
# 管理员登录
#
# 创建 学生 (让用户输入信息,然后实例化,然后写到文件里)
# 课程(让用户输入课程信息. 然后实例化, 然后写到文件里)
# 学生 可以学多门课
# 怎么保存(修改文件)(麻烦)
#
#
# 用上反射就简单
# 不管是学生 登陆 还是 管理员登录 这个地方不要用 if else 进阶需求
原文:https://www.cnblogs.com/xueba/p/12535665.html