网络编程
课前:
# 笔试所有读程序的题重新敲一遍 #lambda 表达式 和 内置函数 #lambda 表达式 和 生成器 # 会不会写程序 就看面向对象之前(打好基础) #网络编程(4天) #并发编程(6天) #数据库(5天) #考试 到数据库结束 # 欠的课 # 面向对象的进阶 # 包的相对导入 + 规范版本的选课 # 选课的作业讲解 # 考试题的讲解(明天今天先弄把) #两天
时间安排:
# 会不会写代码都停留在面向对象之前的东西了 # 1、 网络基础 # 2、 基于两种协议的通信方式-代码 # 3、 解决黏包问题 +ftp网盘(周三留大作业) # 4、 实现并发 # 5、 操作系统的东西 ''' 没有网络的东西没有并发的东西 所有的程序都能写了 只不过差某些模块没有了解 ''' lst = filter(lambda n:n%3 ==1 ,range(10)) print(len(list(lst))) ''' 装qq 百度网盘 本地的文件 腾讯服务器端 自己的电脑 带着qq号,你发的内容,对象的qq号,在线推给不在线,等在线再推 pycharm 都联网互联网+ 代码同步到服务器 然后服务器的命令行 输入法 也联网 特殊的密文存储到 输入法的数据库里面 都在备案了所有的东西 公安局 对外说加密的是不可逆的 但是还是可以弄出来 网络上所有的东西都是不安全的 密码 两个字 图片出来 如果发的话 密码文字一搜就出来了 不断更新图片相对好'''
网络编程之B/S C/S (手机端W/S 支付端A/S)
# 执行计算器 # 执行选课 不是执行模块调用 那样相当于 一个程序 # 两个程序的时候 最初 建一个文件 一个存 另一个程序在读 # 基于同一台机器上的多个程序之间t通信 可以基于文件 # 基于多台机器之间的通信 可以基于网络 # web 程序两种框架完成的: #C/S :client(客户端) server(服务端) #B/S :browser(浏览器) server(服务端) # C/S 所有的需要安装的 .exe 文件 客户端 # 对应的服务端 ####吹毛求疵了 # 讲师机 <----> server云服务器 <--->我的笔记本 # 所有的百度网盘 用的同一个服务器 #B/S # 服务器 博客 网址 百度服务器 # 一条 url 的事儿 # 所有能够用网页访问的网站 这个网站是B/S 架构的 # 拉勾 12306 # (不是uc IE 360 百度等等) # (淘宝的app和网页 解析的是不同的) # B/S 和 C/S 架构的关系 # 所有的B/S架构都需要一个浏览器才能访问 # 浏览器是一个软件,相当于一个客户端 # 所有的B/S架构 都是 C/S架构的 # 浏览器(browser)是特殊的客户端(client) # client(broser) <----> server # 这两种架构哪个好? #C/S 装好之后直接双击就可使用 #B/S 极大的简化我们使用软件的成本 # B/S # 未来 # 浏览器做不到 客户端存到本地文件了 # 续传也做不到 # 游戏招数什么的存在本地的 因为网速跟不上 数据什么的存在server端 # 浏览器(不够强壮) # 更符合现在的使用理念 # 但是还有很多功能没有实现 #在pc端 , 统一了程序的入口 #在手机端, 没那么喜欢用浏览器 不方便 页面小 比如淘宝 电脑上的和手机上相反 # 统一入口的软件 (W/S) 所有的app都有了小程序 # 被挤得没地了之后 支付宝统一了几乎所有支付的入口 #C/S 可能不大有发展的 就是做app的 相对来说 #所有的行业都在互联网+ 小程序更有前途 浏览器上就行了 网盘就行了 网速快了 #以后所有的在互联网上就可以很方便的 趋势 尝试 了解
B/S(未来) (统一接口)
C/S (灵活全面)
微信小程序(未来)招聘(各个做app公司-->小程序):
https://sou.zhaopin.com/?jl=530&kw=%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F&kt=3
网络通信:
# 网速为了更好更快的体验 带动了 网页加载存储 输入法 好用方便 节省人力 爱不释手 # 未来趋势 适者生存 不是公司所能左右的 所以还可以吧 # 网络 到底是什么? 计算机之间如何通信的? #早期 : 服务器1 ---网线(传电信号)-----服务器2 # 有网卡:身份证(出厂时不重复) # 你是谁 我是谁 #(身份证号) #比喻学习法 不满足当下 更方便 # mac 地址 唯一表示了一台机器 # mac 地址 说的话 你的mac 地址 # ipconfig/all 查 mac 地址 # 多台机器之间的通信 #交换机 (不认识ip地址) # 身份证号 mac # 名字 ip 192(China).168(培训机构).16(班).x(个人名) # 好找一级级 # ip 地址 #填位法 #192.168.16.3 #128 64 32 16 8 4 2 1 #1 1 0 0 0 0 0 0 #1 0 1 0 1 0 0 0 #10000 #11 #110000001010100000010000000000011(3) #192.168.16.4 # 先读32 位 找到了谁发给我的ip # 又读32 位找到了是发给我的 # 剩下的 才是信息 # 网络之间的最重要的是协议 #ipv4协议 32位的二进制组成4位点分十进制的(主流)(北京) #最多 0.0.0.0 - 255.255.255.255(不够用了) #ipv6协议 是由6位 冒分16进制组成的 (雄安) # 0:0:0:0:0:0 - FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF # 为了未来 (把沙滩上的每一粒沙子都可以分配一个) 好多倍 但是复杂了吗 慢了吗 #过程 # 交换机 不认识 ip地址 每一台机器都发(广播) 判断是否一致 不是丢弃 就像点名答到 # 若是 回复mac地址 交换机得到 mac 地址 # 交换机 完成的:地址解析协议 arp协议 # 通过ip地址 找 mac地址 ,然后mac 地址直接传 # 交换机的 广播 单播的功能(给发信者) #广播满世界招人太浪费 #分区 #局域网:(路由器能够做局域网与局域网之间的通信) #路由器(有网关(小区名))----交换机 #爬虫的时候,封网关 #网关ip :另一个作用: 区分在那个局域网内 #复杂的结构 网状的 # 多台机器之间的通信 #mac : 机器的唯一标识 #网卡 : 一个计算机上的硬件 这个硬件出厂的时候分配了一个mac地址 #ip地址 : 比mac 好几,能够按区域区分 #协议 : 传输过程中 规定位数 顺序等等传输规则的内容 #交换机 : 局域网内多台机器之间的通信 #arp协议 : 通过ip 地址找到mac地址 #路由器 : 能够做局域网与局域网之间的通信 #网关ip : 在一台机器对局域网外的地址进行访问的时候使用的出口ip # 端口 : 帮助我们找机器上的对应服务 0-65535 #找家里的各个屋子 # 不同 : mac 地址最后确认 #:交换机 内部 路由器 外部 # qq ------>qq (比如:1) # wechat --->wechat (2) # web ------>web (3) # 发给谁 # 端口(0-65535) 确认这台机器上的具体应用 # ip地址+mac地址确认机器 #web的默认 80 hh协议() myseco(。。。) flask(5000) 剩下的8000往后的 #子网掩码 #ip的保留字段 #我小伙伴连不上我
子网掩码:
# qq ------>qq (比如:1) # wechat --->wechat (2) # web ------>web (3) # qq 号码 你的ip+端口 #157820000 : 再见 #腾讯服务器---也是一台计算器 #191691100 网关ip # qq号为唯一标识+网络环境(在线与否) #157820000 网关ip #qq 号码 #他的ip+端口 # 如果没在线 #离线传输 以后要做的作业 #在数据库里 :{157820000:{“1478”:['再见'],“1378”:['再见']}} # 发给谁 # 端口(0-65535) 确认这台机器上的具体应用 # ip地址+mac地址确认机器 #web的默认 80 hh协议() myseco(。。。) flask(5000) 剩下的8000往后的 #子网掩码(计算)一台机器和另一台机器与计算相同 在同一个区内 #192.168.0.0 #192.168.16.3 # 11000000.10101000.00010000.00000011 #1&1 =1 #一&数 = 数 # 1$0 0$0 0$1= 0 #零&数 = 0 #255.255.0.0 与运算的结果是一样的 192.168.0.0 两个与运算的结果 #193.168.32.5 # 11000000.10101000.00010000.00000011 #ip的保留字段 #我小伙伴连不上我 #0.0.0.0 - 255.255.255.255 #随便查ip地址 # IPv4 地址 . . . . . . . . . . . . : 192.168.44.1 # 子网掩码 . . . . . . . . . . . . : 255.255.255.0 #10.0.0.0 - 10.255.255.255 # 没有分配的 不对外服务的 #172.16.0.0 - 172.31.255.255 # 内网用了 外网不能用 #192.168.0.0 - 192.168.255.255 #65535 台机器 第一台网关用了 192.68.0.1 #127.0.0.1 本地的回环地址 别的人找不到你,只有你自己可以找到 :测试 # 这台电脑本身 # 代码不能用 确认网卡是好的 #127.0.0.1 #可以访问代码没问题 # 找我自己 发过来 #0.0.0.0 全网段地址 # server : 192.168.16.13 :9000 #端口 ip地址是什么 就起什么名 给你你还得改 #0.0.0.0:9000 #每个地址都一样 # osi 七层协议 七层协议:每层对应的协议\物理设备 # ip 端口号 # ip port # socket 套接字 # 所有的网络通信的底层都是基于socket 做的(先有的socket 每个语言都有 php) #不在操心 ip地址在哪 mac 地址在哪
server
#__author : 'liuyang' #date : 2019/4/8 0008 下午 12:19 import socket sk = socket.socket() #创建一个socket对象 # sk.bind(('192.168.16.13',9001)) #绑定一个服务端的地址,元组,地址,大于8000的数字 # 只有我自己可以连我自己 别的不 sk.bind(('127.0.0.1',9002)) sk.listen() # 开机 #开始接受客户端给我的连接 conn,addr = sk.accept() # 阻塞( 等一个电话) 连接 地址 conn.send(b'hello00001212') #给那个连我的人发一条信息 msg = conn.recv(1024) # 个字节 load 吗 # 从连我的人那里接受一条信息 #阻塞:直到从连我的人那里接收一条信息 print(msg.decode('utf-8'),addr) conn.close() #关电话 sk.close() #关手机
client
#__author : 'liuyang' #date : 2019/4/8 0008 下午 12:19 # import socket # sk = socket.socket() # sk.connect(('192.168.16.13',9001)) # msg = sk.recv(1024) # print(msg) # # sk.send(b'wahaha') # sk.close() import socket sk = socket.socket() sk.connect(('192.168.16.96',9000)) # sk.connect(('127.0.0.1',9002)) msg = sk.recv(1024) print(msg) sk.send(b'wah0000aha') sk.close()