32 网络编程  (一)
一.架构
定义:程序员开发的一种模式.
分类:
C/S 架构 C/S即:Client与Server , 客户端/ 服务器模式 . 缺点 : 冗余
B/S 架构 Browser与Server, 浏览器 /服务器模式 . 优势 : 统一了应用的接口
二.网络通信编程
1.网卡 : mac地址,电脑的物理地址(真实存在的),mac地址要求全球唯一.
2.IP协议 : 规定网络地址的协议叫IP协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
范围0.0.0.0-255.255.255.255
IP协议的作用:
(1).一个是为每一台计算机分配IP地址.
(2).另一个是确定哪些地址在同一个子网络.
3.IP地址 : 是指互联网协议地址(Internet Protocol Address 网际协议地址),是IP Address的缩写
是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
4.IP地址形式 : 是一个32位的二进制数,通常被分割为4个"8位二进制数"(4个字节).IP地址通常用"点分十进制"表示成(a.b.c.d)的形式,其中a,b,c,d都是 0-255之间的十进制整数.例: 点分十进IP地址
(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110).
5.端口 : 是英文port的意译.操作系统为每一个应用程序分配一个端口号,IP+端口号唯一确定某一程序. (是一个程序唯一的标识)
6.mac地址:
每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
7.arp协议 (通过目标IP获取目标mac地址)
服务器 1 找到服务器 2 的mac地址步骤: (补充 组播:给一组服务器发消息.)
(1)服务器1发送请求帧给交换机;
(2)交换机以广播方式找寻服务器2:
(3)服务器2接收到请求返回给交换机;
(4)交换机以单播方式返回给服务器1.
整个过程服务器 1 通过服务器 2 的IP地址,借助交换机的功能找到服务器 2 的mac地址.
8.局域网:
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组;局域网是封闭型的,
可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
9.子网掩码:
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,
IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
9.用网段来确定一个IP是否在当前局域网内
网段 = IP地址 & 子网掩码 ( 两个数位都为1,运算结果为1,否则为0 )
172.16.10.1:10101100.00010000.00001010.000000001
255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0 同一个局域网内.
10.广域网 : 全是通用的网络.
11.路由器 : 路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号,
路由器是互联网络的枢纽,"交通警察".
12 路由器与交换机的区别:
路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。
这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。
13.路由器(Router)又称网关设备(Gateway)
是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,
可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,
可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备.
14.TCP协议(通信协议一): 安全可靠的通信方式,如果发生错误会返回错误,让用于重发.
TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)
面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序
TCP编程(服务器和客户端)
服务器:
import socket
sk=socket.socket(type=socket.SOCKET_STREAM) 默认tcp协议 (类似买手机)
sk.bind(("127.0.0.1",端口号)) 端口号0 - 65535 ; 0-1023 不能用; 8000-10000 常用时刻 (类似买手机卡)
sk.listen() (类似于告诉朋友手机号)
conn,addr=sk.accept() (类似于等电话)
msg=conn.recv(1024) (类似于聊天)
print((msg) 可以有参数 decode("utf-8") addr
conn.close() (类似于挂点电话)
sk.close() (类似于关机)
客户端:
import socket
sk=socket.socket()
sk.connect(("127.0.0.1",端口号)) (类似于给手机打电话)
sk.send(b'hello') 必须是字节
sk.close()
15.UDP协议(通信协议二): 不安全,不可靠的通信方式 速度快.
UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、
面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。 (常用于视频会议)
16.回环地址:
127.0.0.1 是一个回环地址,无论什么时候都可代表本机的IP地址(仅限在本机使用)
17.命令:
在cmd中输入命令ipconfig_all 查看ip 的相关设置
18.什么是协议
由多人制定的一种规则.
19.socket
用socket去操作tcp udp 协议

面试题:
三次握手: 必须是客户端先发起.
(1).客户端发送请求给服务器;
(2)服务器回复客户端;
(3)客户端回复服务器.
四次挥手: 谁发起都可以 其中一端连续发两条.
(1).客户端发断开请求给服务器:
(2).服务器回复确认收到请求;
(3).服务器给客户端发送准备断开;
(4).客户端断开吧.
三.互联网协议与osi模型.
1.互联网协议按照功能不同分为osi五层.
2.OSI 五层模型:
应用层 (.py文件 ,http,ftp, tftp)
传输层 (tcp , udp)
网络层 (IP协议 路由器)
数据链路层 (arp协议 ,网卡)
物理层 (网线 , 光纤 ,集线器)
必背:
arp协议
tcp udp 的区别
tcp 三次握手 四次挥手
什么是协议
tcp协议编码的流程
作业:写一个聊天程序可支持一个服务器与多个客户端通信
一个服务器多个客户端
#服务器:
# import socket
# sk=socket.socket()
# sk.bind(("127.0.0.1",8802))
# sk.listen()
# while 1:
# conn,addr=sk.accept()
# while 1:
# msg=conn.recv(1024).decode("utf-8")
# print(msg)
# if msg=="q":
# break
# content=input(">>>").encode("utf-8")
# conn.send(content)
# if content=="q":
# break
# conn.close()
# sk.close()
#客户端
# import socket
# sk=socket.socket()
# sk.connect(("127.0.0.1",8802))
# while 1:
# content=input(">>>")
# sk.send(content.encode("utf-8"))
# if content=="q":
# break
# msg=sk.recv(1024).decode("utf-8")
# print(msg)
# if msg=="q":
# break
# sk.close()
tcp协议 输出带颜色的信息
#服务器:.
import socket
sk=socket.socket()
sk.bind(("127.0.0.1",8803))
sk.listen()
dic={"alex":"\033[0;35;42m","太白":"\033[0;33;40m"}
while 1:
conn,addr=sk.accept()
while 1:
msg=conn.recv(1024).decode("utf-8")
# print(msg)
name=msg.split(":")[0].strip()
# content=msg.split(":")[-1]
color=dic.get(name,"")
print(content)
print("%s%s\033[0m" % (color,msg))
if content=="q":
break
content=input(">>>")
conn.send(content.encode("utf-8"))
if content=="q":
break
conn.close()
sk.close()
#客户端
import socket
sk=socket.socket()
sk.connect(("127.0.0.1",8803))
name=input("姓名:")
while 1:
content=input('>>>')
content1=name+":"+content
sk.send(content1.encode("utf-8"))
if content=="q":
break
mag=sk.recv(1024)
print(mag.decode("utf-8"))
if mag=="q":
break
sk.close()
												

python全栈开发 * 32知识点汇总 * 180717的更多相关文章

  1. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  2. python全栈开发 * 01知识点汇总 * 180530

    一 python简介. 1.创始人:  吉多 .范罗苏姆  \   (Guido van Rossum). 2.时间  :  1989年. 3.主要应用领域  :  云计算 \  WEB开发  \   ...

  3. python全栈开发 * 26知识点汇总 * 180709

    26 logging collections random 模块 一.logging低配:日志不能写入文件与显示同时进行 import logging logging.basicConfig(leve ...

  4. python全栈开发 * 12 知识点汇总 * 180530

    12 知识点总结 装饰器进阶 ⼀. 通⽤装饰器的回顾1.开闭原则: 对增加功能开放. 对修改代码封闭2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能3.通⽤装饰器的写法:def wrap ...

  5. python全栈开发* 02 知识点汇总 * 180531

    运算符和编码 一  格式化输出 1  .输入  name ,age , job , hobby. 输出  :   ---------------  info of Mary  ------------ ...

  6. python全栈开发 * 36知识点汇总 * 180721

    36 操作系统的发展史 进程一.手工操作--穿孔卡片 1.内容: 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制 台开关启动程序针对 ...

  7. python全栈开发 * 33 知识点汇总 * 180718

    33 udp协议编码 显示客户端名字,输出带颜色的内容 udp协议的时间同步机制 #一.udp 协议编码 一个服务器,多个客户端#服务器:# import socket# sk=socket.sock ...

  8. python全栈开发 * 31知识点汇总 * 180716

    31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...

  9. python全栈开发 * 24 知识点汇总 * 180705

    24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...

随机推荐

  1. phpt5支付宝登陆支付接口解析

    先看效果图 下面的源码来源网络,自己对照修改. 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['o ...

  2. iOS https请求 NSURLSessionDataTask

    // //  YKSHttpsRequest.m //  YKShareSdkDemo // //  Created by qingyun on 22/05/2017. //  Copyright © ...

  3. 为什么虚拟 dom 会提高性能?

    虚拟 dom 相当于在 js 和真实 dom 中间加了一个缓存,利用 dom diff 算法避免了没有必要的 dom 操作,从而提高性能.用 JavaScript 对象结构表示 DOM 树的结构:然后 ...

  4. 解决python多版本共存问题

    1.cmd下,python时,默认是python3版本, 2.打开D:\Anaconda2 3.找到exe文件,python.exe和pythonw.exe,将其修改为python2.exe和pyth ...

  5. linux 安装nvm,通过nvm安装node

    1,nvm git地址点击打开链接,安装命令 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh ...

  6. Linux下通过server-status监控性能

    Linux下通过server-status监控性能 前提:安装好Apache,在opt/路径下 查看Apache的工作模式 可以知道是 prefork.c模式 配置server-status 性能 进 ...

  7. C# Cache缓存读取设置

    先创建一个CacheHelper.cs类,代码如下: using System; using System.Web; using System.Collections; using System.We ...

  8. Spring Boot 2.x 学习专栏

    Spring Boot 2.0 入门指南 Spring Boot 2.0 返回JSP页面实战 Spring Boot 2.0 热部署指南 Spring Boot 2.0 整合FreeMarker模板引 ...

  9. 【原创 Hadoop&Spark 动手实践 11】Spark Streaming 应用与动手实践

    [原创 Hadoop&Spark 动手实践 11]Spark Streaming 应用与动手实践 目标: 1. 掌握Spark Streaming的基本原理 2. 完成Spark Stream ...

  10. 根据IP查地理位置信息

    IP地址库下载地址: https://www.ipip.net/product/ip.html 使用方式(Python): https://github.com/ipipdotnet/datx-pyt ...