day28

1.内容回顾

# 网络概念
# 网络架构
   # C/S client-server
       #
   # B/S browser-server
       # web服务
   # B/S是特殊的C/S

# 物理设备
   # 网卡   mac地址 全球唯一的物理地址
   # 交换机 完成局域网内的多台机器之间的通信
           # 单播 组播 广播
           # 只能识别mac地址
           # arp协议(地址解析协议) :
                      # 通过ip地址获取它的mac地址
                      # 由交换机完成的
                      # 广播 单播
   # 路由器 完成局域网与局域网之间的联系
           # 能识别ip地址
           # 网段
           # 网关ip
               # 访问局域网外部服务的一个出口ip
   # ip地址在网络上定位一台机器
       # ipv4
       # ipv6
   # port能够在网络上定位一台机器上的一个服务
       # 0-65535

2.tcp协议和udp协议

# 概念
# tcp协议 -- 打电话
   # 可靠 慢 全双工通信
   # 建立连接的时候 : 三次握手
   # 客户端-(请求连接)-服务端-(同意链接,请求连接)-客户端-(同意链接)-服务端
   # 断开连接的时候 : 四次挥手
   # 客户端-(请求断开)-服务端-(同意断开)-(请求断开)-客户端-(同意断开)-服务端
   # 在建立起连接之后
       # 发送的每一条信息都有回执
       # 为了保证数据的完整性,还有重传机制
   # 长连接 :会一直占用双方的端口
   # IO(input,output)操作,输入和输出是相对内存来说的
       # write send - output
       # read recv   - input
   # 能够传递的数据长度几乎没有限制
   
   # 应用场景
   # TCP 文件的上传下载(发送邮件、网盘、缓存电影)    

# udp协议 -- 发短信
   # 无连接的 速度快
   # 可能会丢消息
   # 能够传递的数据的长度是有限的,是根据数据传递设备的设置有关系

   # 应用场景
   # UDP 即时通信类的(qq、微信、飞秋)  
   
# osi七层模型
# 应用层
   # 表示层
   # 会话层
   # 传输层
   # 网络层
   # 数据链路层
   # 物理层

# osi五层协议     协议                 物理设备
   # 应用层     http https ftp smtp
   #             python代码 hello
   # 传输层     tcp/udp协议 端口     四层交换机、四层路由器
   # 网络层     ipv4/ipv6协议         路由器、三层交换机
   # 数据链路层 mac地址 arp协议     网卡 、交换机
   # 物理层
# 代码部分
# socket是什么
  # socket 套接字
       # python     socket模块   完成socket的功能
       # 工作在应用层和传输层之间的抽象层
           # 帮助我们完成了所有信息的组织和拼接
       # sokcet对于程序员来说 已经是网络操作的底层了
       # socket历史
           # 同一台机器上的两个服务之间的通信的
               # 基于文件
           # 基于网路的多台机器之间的多个服务通信
           
   # 2.使用socket完成tcp协议的web通信
   
# server.py
import socket

sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()    # n 允许多少客户端等待
print('*'*20)
while True:   # outer
   conn,addr = sk.accept()    # 阻塞
   print(addr)
   while True:   # inner
       msg = conn.recv(1024).decode('utf-8')
       if msg.upper() == 'Q': break
       print(msg)
       inp = input('>>>')
       conn.send(inp.encode('utf-8'))
       if inp.upper() == 'Q':
           break
   conn.close()
sk.close()


# client.py
import socket

sk = socket.socket()

sk.connect(('127.0.0.1',9000))
while True:
   inp = input('>>>')
   sk.send(inp.encode('utf-8'))
   if inp.upper() == 'Q':
       break
   msg = sk.recv(1024).decode('utf-8')
   if msg.upper() == 'Q': break
   print(msg)
sk.close()

   # 3.使用socket完成udp协议的web通信
   
# server.py
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9000))
while True:
   msg,client_addr = sk.recvfrom(1024)
   print(msg.decode('utf-8'))
   msg = input('>>>').encode('utf-8')
   sk.sendto(msg,client_addr)
sk.close()

# client.py
import socket

sk = socket.socket(type=socket.SOCK_DGRAM)
while True:
   inp = input('>>>').encode('utf-8')
   sk.sendto(inp,('127.0.0.1',9000))
   ret = sk.recv(1024)
   print(ret)
sk.close()

 

posted @ 2020-05-28 20:54  投降输一半!  阅读(164)  评论(0编辑  收藏  举报