网络编程
Posted gxj742
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
网络基础相关知识:
1.架构
(1)C/S 架构:client客户端和server服务器端 优点:能充分发挥pc机的性能
(2)B/S架构:browser浏览器和server服务器端 隶属于C/S架构 优点:统一了应用的接口
2.通信
(1)同一台电脑上两个py程序通信: 打开一个文件
(2)两个电脑如何通信: 连一根网线
(3)多个电脑通信: 借助于交换机
多个电脑通信过程:电脑1首先发送一个请求帧(我的ip地址是:....,我的mac地址是...;我要找ip地址是....的主机),将此请求发送给交换机,交换机广播这条消息给其他所有主机,目标主机接收到消息后.对比发现自己就是被找的主机后,回复给交换机信息(我的ip是....,我的mac地址是......;请回复给ip地址是....,mac地址是:...主机)交换机以单播的形式返回给源主机.
网卡有mac地址(物理地址):mac地址全球唯一的 mac地址是网卡制造商给的 mac地址是十六进制 类似身份证
ip地址:是一个四位点十进制,它标识了计算机在网络中的位置
arp协议:通过目标ip地址获取目标mac地址的一个协议(过程)
端口:操作系统(os)为本机上每一个运行程序者随机分配的一个端口,其他电脑上的程序可以通过端口获取到这个程序.
ip地址+端口 = 找到某台电脑的端口 ip找到主机 端口找到某一服务
交换机通信方式:1.广播;2.单播:一对一;3.组播:一对多
路由器:连接不同网段(ip地址),路由(里面含有一个路由表)
网关:类似于一个局域网的出口和入口
网段:一个局域网内的ip地址范围
子网掩码:子网掩码&ip地址==网段
例:
ip地址: 192.168.12.104 ==> 1100 0000. 1010 1000. 0000 1010. 0110 1000
&
子网掩码: 255.255.255.0 ==> 1111 1111. 1111 1111. 1111 1111. 0000 0000
网段: 1100 0000. 1010 1000. 0000 1010. 0000 0000
196. 168. 12. 0
标准输出:屏幕(stdout) 标准输入:键盘(stdin)
osi五层模型:
协议 物理设备
应用层: http/https/ftp
传输层: tcp/udp 四层交换机,四层路由器
网络层: ip协议 路由器,三层交换机
数据链路层: arp协议 以太网交换机(二层交换机),网卡,网桥(mac地址相关)
物理层: 传输电信号 集线器,网线,光纤,一层交换机
二层交换机:组织局域网,不具备跨网段传输
三层交换机:具有跨网段传输
四层交换机:帮用户采取tcp/udp协议
网桥:可以实现跨网段的传输数据
tcp协议:比较安全 udp协议:传输速度快
socket模块(套接字):
socket的两种类型:
(1).AF_UNIX:基于文件类型的套接字(早期socket是源于unix系统而研发的一个功能,主要为同一台电脑上多个编程直接通信),unix系统中心思想是:一切皆文件.
(2)AF_INET:基于网络的套接字
tcp协议(SOCK_STREAM):可靠的,面向连接的,面向数据流形式的传输方式
udp协议(SOCK_DGRAM):不可靠的,不面向连接的,面向数据报的传输方式,但是传输速度块.
例:
服务端代码:
import socket
import time
sk = socket.socket() #实例化对象 不传参数默认使用基于网络类型套接字,tcp协议
sk.bind(("192.168.12.93",45612)) #bind()接收元组类型元组第一个元素是ip地址,第二个元素是端口 端口范围0-65535 但是0-1023这些不能用
sk.listen() #同时能接受的连接
conn,addr = sk.accept()#接受客户端的连接阻塞等待conn == <socket.socket fd=472, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘192.168.12.93‘, 45612), raddr=(‘192.168.12.93‘, 64343)> addr == (‘192.168.12.93‘, 64343)
msg = conn.recv(1024) #接受数据 recv()参数时数据的大小
print(msg.decode("utf-8"))
conn.close() #关闭客户端的连接
sk.close() #关闭服务端
==>hello
客户端代码:
import socket
sk = socket.socket() #实例化对象
sk.connect(("192.168.12.93",45612)) #连接地址
sk.send("hello".encode("utf-8")) #发送信息
sk.close() #关闭客户端
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装