PYTHON2.day01

1.网络编程(难点)
2.进程线程(难点)
3.正则表达式
4.MongoDB数据库(非关系型数据库)
5.git使用
6.基础项目示例


一.网络编程
    1.网络功能:数据的传输
   
    2.OSI七层模型
      制定组织:ISO国际标准化组织
      作用:使网络通信工作流程标准化      
     
      应用层:提供用户服务,具体功能有应用功能实现
      表示层:数据的压缩优化加密
      会话层:建立用户级的连接,选择适当的传输服务
      传输层:提供传输服务
     
      网络层:路由选择,网络互联
      链路层:进行数据交换,控制具体数据的发送
      物理层:提供数据传输的硬件保证,网卡接口,传输介质
     
      优点:1.建立了统一的工作流程
           2.分部清晰,各司其职,每个步骤分工明确    
           3.降低了各个模块之间的耦合度,便于开发
          
      cookie:高内聚:模块功能尽可能单一,不相互掺杂
               低耦合:模块之间的关联一影响尽可能少
             封装
            
      四层模型(TCP/IP模型)
      背景:实际工作中工程师无法按照七层模型要求操作,逐渐演化为更符合实际情况的四层
     
      应用层:集中了应用,表示,会话的功能
      传输层:
      网络层
      物理链路层:链路层依托于硬件设备
     
   3.数据传输过程
      [1]发送端由应用程序发送消息,逐层添加首部信息,最终在物理层发送消息包
      [2]发送的消息经过多个节点(交换机,路由器)传输,最终到达目标主机
      [3]目标主机有物理层逐层解析首部消息包,最终到应用程序呈现消息。
    
    4.网络协议
      定义:在网络数据传输中,都遵循的规定,包括建立什么样的数据结构,什么样的特殊标志等。
     
    5.网络概念
      [1]网络主机(host)
         功能:标识一台主机在网络中的位置(地址)
         本地地址:'localhost'
                   '127.0.0.1'

         网络地址:'192.168.43.165' 
                 查看本机网络地址:ifconfig       以太网inet地址
                                    ipconfig(windous
) '192.168.43.209'
         自动获取地址:0.0.0.0
      [2] IP地址
          功能:确定一台主机的网络路由位置
          结构:IPv4 点分十进制表示 192.168.43.165 每部分取值范围0-255
                IPv6 128位 扩大了地址范围
               
          特殊IP:127.0.0.1     本机测试IP
                  0.0.0.0       自动获取本机网卡地址
                  172.40.91.0   通常表示一个网段
                  172.40.91.1   通常表示一个网关
                  172.40.91.255 用作广播地址

      [3] 域名
          定义:给网络服务器地址起名字
          作用:方便记忆,表达一定的含义
         *ping [ip]:测试和某个主机是否联通
         
      [4] 端口号(port)        
          作用:端口是网络地址的一部分,用于区分主机上不同的网络应用程序
          特点:一个系统中的应用监听端口不能重复
          取值范围:1-65535
                    1-1023 系统应用或者大众程序监听端口
                    1024-65535 自用端口
                   
二.传输层服务
     面向连接的传输服务(基于TCP协议的数据传输)
         1.传输特征:
           提供了可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无重复
         2.实现手段:
           在通讯前需要建立数据连接,通信结束要正常断开连接
           [1] 三次握手(建立连接)
               1.客户端向服务器发送消息报文请求连接
               2.服务器收到请求后,回复报文确定可以连接
               3.客户端收到回复,发送最终报文建立连接
           [2] 四次挥手(断开连接)
               1.主动方发送报文请求断开连接
               2.被动方收到请求后,立即回复,表示准备断开
               3.被动方准备就绪,再次发送报文表示可以断开

               4.主动方收到确定,发送报文完成最终断开
         3.适用情况
           对数据传输准确性有明确要求,传输文件较大,需要明确可靠性的情况。比如:网页获取,文件下载,邮件收发
          
          
     面向无连接的传输服务(基于UDP协议的数据传输)
         1.传输特征:
           不保证传输的而可靠性,传输过程没有连接和断开,数据收发自由随意
         2.使用情况
           网络较差,对传输可靠性要求可靠性不高,比如:网络视频,群聊,广播
          
面试要求:1.OSI七层模型介绍一下,tcp/ip模型是什么
           2.tcp服务和udp服务有什么区别
           3.三次握手和四次挥手指什么,过程是什么样的
          


三.socket套接字编程
    1.套接字:实现网络编程进行数据传输的一种技术手段
    2.python实现套接字编程
      import socket
    3.套接字分类
     流式套接字(SOCK_STREAM):以字节流方式传输数据,实现tcp网络传输方案
     
      数据报套接字(SOCK_DGRAM):以数据报的形式传输数据,实现udp网络传输方案

     
      面向连接--tcp协议 --可靠的--流式套接字
      无连接--dup协议--不可靠--数据报套接字
     
      *函数:功能,参数,返回值
     
     tcp套接字编程
       [1]服务端流程
       import socket(前提)
                      .类(类的参数传给初始化。。)
      1.创建套接字
           sockfd = socket.socket(socket_family=AF_INET,
                                  socket_type = SOCK_STREAM,
                                  proto=0)

           功能:创建套接字
           参数:socket_family 网络地址类型 AF_INET--->ipv4
                 socket_type   套接字类型 SOCK_STREAM流式,SOCK_DGRAM数据报
                 proto 通常为0 选择子协议
           返回值:套接字对象
      
       2.绑定地址
         sockfd.bind(addr)

         功能:绑定本机网络地址
         参数:二元元组(ip,port) ('127.0.0.1',8888)自己访问
                                 (localhost)自己访问
                                    ('0.0.0.0',8888)
                                    ('ip',)
       3.设置监听
         sockfd.listen(n)

         功能:将套接字设置为监听套接字,确定监听队列大小
                                                 *一个套接字可以连接多个客户端(一个个连接)--队列
                                                 *参数n在Linux下无用
         参数:监听队列大小
        
      4.等待处理客户端请求
         connfd,addr = sockfd.accept()

         功能:阻塞等待处理客户端请求
         返回值:connfd 客户端连接套接字
                 addr 连接的客户端地址
         *阻塞函数:程序运行过程中遇到阻塞函数则暂停执行,直到达成某种条件后继续运行
        
      5.消息收发
         data = connfd.recv(buffersize)

         功能:接收客户端消息
         参数:每次最多接收消息的大小
         返回值:接收到的内容
        
         n = connfd.send(data)
         功能:发送消息
         参数:要发送的内容 bytes格式
         返回值:发送的字节数
        
         * str -->bytes string.encode()
           bytes -->str  bytes.decode()
          
       6.关闭套接字
         sockfd.close()
         功能:关闭套接字

  1 import socket
  2 
  3 #创建套接字
  4 sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5 #绑定地址
  6 sockfd.bind(('0.0.0.0',8888))
  7 
  8 #设置监听
  9 sockfd.listen(5)
 10 #等待处理客户连接
 11 print("waitting for connect...")
 12 connfd,addr = sockfd.accept()
 13 print("Connect from",addr)#客户地址
 14 
 15 #收发消息
 16 #收
 17 data = connfd.recv(1024)
 18 print("Receive message",data.decode())
 19 #发
 20 n= connfd.send(b"Receve your message!!")
 21 print("Send %d bytes"%n)
 22 #关闭套接字
 23 connfd.close()#连接套接字
 24 sockfd.close()#监听套接字
tcp_server.py
  1 from socket import *
  2 
  3 #创套接字
  4 sockfd = socket()
  5 
  6 #发起连接
  7 server_addr = ('172.40.71.149',8888)
  8 sockfd.connect(server_addr)
  9 
 10 #收发消息
 11 #发
 12 data = input(">>")
 13 sockfd.send(data.encode())
 14 
 15 #收
 16 data = sockfd.recv(4096)
 17 print("From server:",data.decode())
 18 
 19 #关闭套接子
 20 sockfd.close()
tcp_clent.py

          2019-02-14_8-40-07

原文地址:https://www.cnblogs.com/shengjia/p/10388026.html