网编

内容回顾

#__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一样你登录之后,就可以选一个人给他发消息

原文地址:https://www.cnblogs.com/Doner/p/10676028.html