网络编程
1网络基础
1.1地址
mac地址
ip地址,4个点分十进制表示
子网掩码,将挡住的ip位数作为网段,未挡住的部分作为可变
网关,路由器中连接交换机的口
DHCP,自动为局域网电脑分配ip
路由器
交换机
广播/单播
arp协议
局域网/广域网
DNS
1.2端口,将同一个电脑上的不同程序进行隔离(ip找电脑,端口找电脑上的程序)
mysql在硬盘上进行文件操作 3306
redis 在内存上进行数据操作 6379
2osi7层模型
应用层,使用软件
表示,看到数据,如图片、视频
会话,保持登录或链接状态
传输,tcp/udp
网络,ip寻址
数据链路,mac
物理,将数据转换成电信号
3tcp三次握手/四次挥手
socket客户端向服务端发起连接请求:3次握手
客户端跟服务端断开连接:4次挥手
4BS和CS架构
a软件:
客户端:CS架构--->client ----server
浏览器:BS架构--->browser--server
b如何实现相互通信
c基于socket模块实现网络通信
为什么网络通信发送的都是字节?而不是字符串?
py3,send/recv 都是字节
py2,send/recv 都是字符串
5socket模块
服务端:
监听ip和端口
等待客户端连接(阻塞)
收(阻塞)
发
accept,阻塞,等待客户端来连接
recv 阻塞,等待客户端发来数据
import socket
创建socket对象
s_sock=socket.socket()
绑定ip和端口
s_sock.bind(('127.0.0.1',8899)
后边可以等5个人
s_sock.listen(5)
等待客户的连接
conn是客户端跟服务端连接的对象(),服务端以后通过该对象进行收发数据
addr是客户端的地址信息
conn,addr=sock.accept()
服务端获取数据时,一次性最多拿1024字节
data=conn.recv(1024)
conn.send(b'stop')
conn.close()
s_sock.close()
客户端:
连接服务端ip和端口(阻塞)
收(阻塞)
发
connect 阻塞,一直在连接,直到连接成功才往下运行其他代码
recv 阻塞,等待服务端发来数据
import socket
c_sock=socket.socket()
s_sock.connect(('127.0.0.1',8899))
s_sock.send(b'hello')
s_sock.recv(1024)
s_sock.close()
6黏包
7socketserver模块
多线程/多进程 + socket
面向对象多继承
程序结构
bin
config
core
db
log
readme