python全栈开发 * 32知识点汇总 * 180717
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的更多相关文章
- python全栈开发 * 10知识点汇总 * 180612
10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...
- python全栈开发 * 01知识点汇总 * 180530
一 python简介. 1.创始人: 吉多 .范罗苏姆 \ (Guido van Rossum). 2.时间 : 1989年. 3.主要应用领域 : 云计算 \ WEB开发 \ ...
- python全栈开发 * 26知识点汇总 * 180709
26 logging collections random 模块 一.logging低配:日志不能写入文件与显示同时进行 import logging logging.basicConfig(leve ...
- python全栈开发 * 12 知识点汇总 * 180530
12 知识点总结 装饰器进阶 ⼀. 通⽤装饰器的回顾1.开闭原则: 对增加功能开放. 对修改代码封闭2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能3.通⽤装饰器的写法:def wrap ...
- python全栈开发* 02 知识点汇总 * 180531
运算符和编码 一 格式化输出 1 .输入 name ,age , job , hobby. 输出 : --------------- info of Mary ------------ ...
- python全栈开发 * 36知识点汇总 * 180721
36 操作系统的发展史 进程一.手工操作--穿孔卡片 1.内容: 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制 台开关启动程序针对 ...
- python全栈开发 * 33 知识点汇总 * 180718
33 udp协议编码 显示客户端名字,输出带颜色的内容 udp协议的时间同步机制 #一.udp 协议编码 一个服务器,多个客户端#服务器:# import socket# sk=socket.sock ...
- python全栈开发 * 31知识点汇总 * 180716
31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...
- python全栈开发 * 24 知识点汇总 * 180705
24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...
随机推荐
- 修改MySql数据库的默认时
MySql数据库创建后,默认的时区比东八区少了八个小时.如果Sql语句中使用到MySql的时间的话就会比正常时间少了八个小时.所以需要修改MySql的系统时区,使其显示的时间和我们现在的时间一致. 1 ...
- SNF软件开发机器人-子系统-表单-表单设计
表单设计 在我们做程序时总要对表单的内容进行设计,然而对控件位置等信息的调整总是麻烦的,还常常容易出错.SNF软件机器人完美的解决了这个问题. 1.效果展示: 2.使用说明: (1)打开页面,选中开发 ...
- Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat
Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 ...
- AspectF写法
AspectF.Define .ProgressBar(caption) .Do(() => { if (!SpecialMenuClick(midForm, tag)) { DockBarSh ...
- Oracle 傻瓜式数据归档
推荐用方法二 方法一 [本库备份,分区表需要另写CREATE TABLE方法] ----------------------------------------------- ; ; ; ; RENA ...
- 【iCore4 双核心板_ARM】例程二十九:SD_IAP_FPGA实验——更新升级FPGA
实验现象及操作说明: 1.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点亮,烧写失败,如果挂载SD卡失败,红灯快闪,如果打开文件失败,蓝灯快闪,读取文件指针移动失败,白灯点亮,升 ...
- 建站工具Hexo
$ npm install hexo-cli -g $ hexo init blog $ cd blog $ npm install $ hexo server
- ambari 安装HDP3.0.1后,启动服务的问题记录
HDP的ambari集成安装工具真的是比ClouderaManager差上那么一点儿,不说安装的时候就麻烦,即使软件安装包已成功安装,也不意味着可以正常使用了,启动HDP集群过程中还会有不少的错误! ...
- 21 go并发编程-下
如何等待一组goroutine结束 1. 使用不带缓冲区的channel实现. 原理: 每个goroutine都往一个channel里写入一个值,然后我们去遍历这个管道的数值,由于不带缓冲区,那么必须 ...
- OpenGL——OpenCV与SOIL读取图片进行纹理贴图
使用OpenCV读取图片代码如下 img = imread(m_fileName); if (img.empty()) { fprintf(stderr, "Can not load ima ...