zoukankan      html  css  js  c++  java
  • 网编

    内容回顾

    #__author : 'liuyang' 
    #date : 2019/4/9 0009 上午 8:54
    # 概念
    # 架构 : BS  CS
    # 硬件
        #网卡 :   计算机中帮助我们完成网络通信
        #交换机:  在局域网内多台机器之间通信
        #路由器:  多个局域网之间的机器之间的通信
    
    # 局域网:一个区域内的多台机器组成的一个内部网络
                #(以前ip地址可以访问网站)ip地址是变得 域名不变 域名找Ip地址
    # 域名: 和ip地址有一个对应的关系,我们访问的域名经过解析也能的到一个ip地址
    
    # 协议类:(你是不是培训的,太系统了)
        #arp协议:通过ip地址获得mac地址
        #ip协议 :ip地址的规范
            #ipv4ipv6
    # 地址类:
        #ip地址 : 四位的点分十进制
        #mac地址 :12位十六进制
        #子网掩码:ip地址,255.255.255.0,255.255.0.0,255.0.0.0
        #网关ip : ip地址,你所在的网段和网关所在的网段是一样的 (出局域网的时候用到网关ip)
        #保留字段:      #内网  #安全        #ip地址不够用
            #10.0.0.1-10.255.255.255
            #172.16.0.0-172.31.255.255
            #192.168.0.0 - 192.168.255.255
        #本地回环地址127.0.0.1
        #全网段地址 0.0.0.0
    View Code

    osi 协议

    #__author : 'liuyang' 
    #date : 2019/4/9 0009 上午 10:15
    # TCP协议
    # 面向连接可靠慢对传递的数据的长短没有要求
    # 两台机器之间要想传递信息必须先建立连接
        # 之后在有了连接的基础上,进行信息的传递
    # 可靠 : 数据不会丢失  不会重复被接收
    #  慢: 每一次发送的数据还要等待结果
        # 三次握手和四次握手
    
    # UDP协议
    # 无连接不可靠快不能传输过长的数据
    # 机器之间传递信息不需要建立连接,直接发就行
    # 不可靠 :数据有可能丢失
    # 优点的好带来了缺点的坏
    
    # UDP 协议:即时通讯类的软件(不可靠):qq 微信 飞信  歪歪
    # TCP 协议:发邮件文件(QQ文件pdf...)  因为 一个错了全乱码了 走的是tcp协议
        # 高清丢帧 不清楚了TCP(清楚)  在线观看 就很清楚 UDP(流畅)
        # 一般都是混用
    #中间过程
        # 发了很多条  收到了哪一条啊
        #    我发 你好3730  收到发3731  再发3732  收到3733
        # 没收到:  1 发过去的信息丢了  2 发回来的信息丢了
                # 一直发3730  一直发3731  收到了
    #初始过程
        # 每次 需要两次 才能发送数据 明白
        # 刚开始 每个两次=4次 建立连接从哪开始的 全双工的通信方式
            #三次握手  两句通讯合并成一句
    #断开
        # 四次挥手 : 我断了不传了 但是,你要传  好你断了 和我没断 不能合并
    
    # SYN  请求连接 ..seq = X
    # ACK  回复连接 ACK = X+1 SYN seq = y
    # FIN  请求断开
    
    # osi 七层协议
    #要发‘hello,world’先带tcp/udp
        #1010101010101断句不知
        #端口 对方端口
        #ip  对方ip
        #mac 对方mac
        #若tcp 还得握手 从哪条信息开始
    # mac 地址
    # 比如#接收 0-47 我的mac
        # 48-95 你的mac
    # tcp / udp协议
        # 96- 150 我的ip
        #150- 200 你的ip
    # 端口协议
        #200 - 220 你的端口
        #220 - 240 我的端口
        # 信息
    
    # 弄出了个抽象层
    #osi 七层协议
    #应用层    #python  send(b'hello,world')
    #表示层
    #会话层   合并到应用层
    #传输层
    #网络层
    #数据链路层
    #物理层
    
    
    
    #应用层    #程序 #python  send(b'hello,world')
    #socket #  # 以后可不用 socket 了(最底层) http协议
    #传输层       #端口 tcp/udp协议       四层路由器  四层交换机 (可以理解端口tcp都行)
    #网络层       #ip地址相关  ip协议     路由器(有交换机的功能)  三层交换机(可理解ip和IP协议)(交换机具有路由器的功能)
    #数据链路层    #mac 地址相关 arp协议   网卡  二层交换机
    #物理层
        #从下往上走  确定mac 地址是不是对上
        # U型  从上往下 从下往上 又对应地址  物 数 网 传 应
    # 每一层都有协议 物理层不关心 都有设备
    View Code

    server

    #__author : 'liuyang' 
    #date : 2019/4/9 0009 上午 9:21
    import socket
    sk = socket.socket()
        #socket对象,实际上存储了所有的操作系统提供给我们的网络资源
        #硬件资源 网卡  和 内存运行的  需要操作系统支持
    
    sk.bind(('127.0.0.1',9000))
    # sk.bind(('192.168.16.13',9000))#和我在一个局域网内的所有机器都可已访问我
    #                             #但是如果这个代码已交给其他机器执行
    #                             #需要把ip地址修改成另一台机器的ip
    # sk.bind(('0.0.0.0',9000))   #所有访问我这台机器的通信还是使用我的ip地址
    #                             #不需要改程序:ip地址  移交到运维可以运行
    #9000被其它端口占用着 会报错
    sk.listen()   #py3.4 括号里需要加int数字,(占线)等几个人
                    #现在无需等了
    # conn,addr = sk.accept()  #等待用户来连接我
    # print(conn)  #像一个联通的电话线,记录server的地址,client的地址#连通了才能打电话
    # print(addr)
    # conn.send()
    
    #str 是字符串    'alex'
    #byte是字节 两种不同的数据类型  b'alex'
    #str -编码(encode)->bytes
    #bytes - 解码(decode)-->str
    #b'娃哈哈'  报错 没有byte 类型
    # '娃哈哈'.encode('utf-8')
    # input 输入的所有都是字符串,要进行网络传输,必须编码变成bytes
    # while 1:
        # i = input('>>>')
        # if i.endswith() =='q'
        # conn.send(i.encode('utf-8'))
    while 1:
        conn, addr = sk.accept()  # 等待用户来连接我
        i = input('>>>')
        if i.upper() == 'Q':
            break
        conn.send(i.encode('utf-8'))
        content = conn.recv(1024) # 102444444内存放不下
        print(content.decode('utf-8'))  #解码
        conn.close()
    sk.close()
    
    # server  要面对很多个client  给他们都打电话
    View Code
    #__author : 'liuyang' 
    #date : 2019/4/9 0009 上午 9:21
    import socket
    sk = socket.socket()
    
    sk.connect(('127.0.0.1', 9000))  # 三次握手
    
    while True:
        ret = sk.recv(1024).decode('utf-8')         #两次拉手
        if ret.upper() == 'Q':
            break
        i = input('>>>')
        print(ret)
    # sk.send(i.encode('utf-8'))
        sk.send(i.encode('utf-8'))
        if i.upper() == 'Q':
            break
    sk.close()  #四次挥手
    
    # 不需要conn 被打进来
    client
    #__author : 'liuyang'
    #date : 2019/4/9 0009 上午 9:21
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1', 9000))  # 三次握手
    while True:
        ret = sk.recv(1024).decode('utf-8')         #两次拉手
        if ret.upper() == 'Q':
            break
        i = input('>>>')
        print(ret)
    # sk.send(i.encode('utf-8'))
        sk.send(i.encode('utf-8'))
        if i.upper() == 'Q':
            break
    sk.close()  #四次挥手
    # 不需要conn 被打进来
    client1

     udp的server

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',9001))
    while 1:
        con = input('>>>')
        msg,client_addr = sk.recvfrom(1024)
        print(msg)
        sk.sendto(con.encode('utf-8'),client_addr)
    sk.close()
    # 登录伴整途  前端 网页。。。。
    View Code

    client

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)  #udp协议 默认的是tcp协议
    while 1:
        con = input('>>>')
        if con.upper() == "Q":break
        sk.sendto(con.encode('utf-8'),('127.0.0.1',9001))    #发送
        msg = sk.recv(1024).decode('utf-8')    #接受  如果关心他从哪来的  from 没有recv
        if msg.upper()=="Q":break
        print(msg)
    sk.close()
    View Code

    # 1 .tcp 协议 和udp 协议的区别总结

     #2 . 默写:1) osi 五层协议+物理设备 + 协议

          2)udp协议的代码

    #3 基于tcp 协议完成一个登陆

      #input 用户名和密码 client

      #验证 server

      #进阶 :hashlib 密文验证

    #4 实现一个局域udp 协议的多人聊天

      #一对多:每个人都有一个自己的id 或者名字

      #进阶: 每一个人都是一个客户端,传给服务器,比较麻烦

        #像qq一样你登录之后,就可以选一个人给他发消息

  • 相关阅读:
    程序设计与算法(一)第3周测验(2020春季)
    程序设计与算法(一)第2周测验(2020春季)
    量化投资_波动和趋势能量比(传统盘整和趋势的量化表示)
    Matlab高级教程_第四篇:白噪声的MATALB生成方式
    数学之美_马尔科夫模型01
    Matlab高级教程_第四篇:Matlab高级函数_关键词:arrayfun
    Matlab高级教程_第四篇:Matlab高级函数_关键词:drawnow,addpoints,animatedline,getpoints
    Matlab高级教程_第二篇:关于MATLAB转C#过程中MWArray到C#数组,C#数组到MWArray相互转换
    Matlab高级教程_第二篇:关于MATLAB转C#过程中遇到输出两组参数的问题
    数学是什么?_基变换(线性代数)
  • 原文地址:https://www.cnblogs.com/Doner/p/10676028.html
Copyright © 2011-2022 走看看