网络编程

课前:

# 笔试所有读程序的题重新敲一遍
#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

 

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的保留字段  #我小伙伴连不上我
View Code

 

 

子网掩码:

# 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 地址在哪
View Code

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()          #关手机
View Code

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()
View Code

 

posted @ 2019-04-08 10:10  learnacode  阅读(227)  评论(0编辑  收藏  举报