美文网首页
2018-10-24day19网络基础和网络编程基础

2018-10-24day19网络基础和网络编程基础

作者: MW演员 | 来源:发表于2018-10-24 17:35 被阅读0次
    • 注意:控制次数后面加?表示次数尽可能可能少匹配(非贪婪匹配)

    • 正则转意:想让特殊功能的符号表示它本身,就可以通过\转移意,除了\和—,其他的符号放在[]中都表示符号本身

    • 匹配相关:match、fullmatch 返回值是匹配对象

    span(), group(), string(),start(),end()

    查找相关

    • search(正则表达式,字符串) 返回一个对象和None,
    • 去字符串中查找满足正则表达式的子串,如果有返回第一个满足条件的字符串匹配对象
    • findall() 获取所有满足正则表达式条件的子串,返回一个元素是字符串的列表。如果正则中有分组,自取分组中的内容
    • finditer() 获取所有满足正则表达式的子串,返回一个迭代器,迭代器中的内容是匹配对象

    切割相关

    • split() 按满足正则条件的子串对字符串进行切割
    • sub(正则,替换值,字符串)
    • compile()将正则表达式转换成正则表达式对象

    一、网络基础

    1、osi参考模型(7层):国际化标准组织分析计算机通信,把计算机通信进行的规范和标准化分成7层
    • 应用层
    • 表示层
    • 会话层:建立回话、木马(盗取数据)
    • 传输层
    • 网络层
    • 数据链路层
    • 物理层
    2、tcp/ip协议
    • 数据传输准备
    • 传输层:消息或数据段 :tcp头和数据
    • 网络层:ip头+ tcp头和数据+FCS
    • 数据链路层:MAC+ ip头+ tcp头和数据+FCS
    • 物理层:转换成二进制(bit)
    3、tcp可靠传输
    • 需要传输的文件需要分段传输
    • 需要建立连接
    4、udp不可靠传输
    • 一个数据包就能完成数据通信
    • 不需要建立回话
    二、socket套接字
    1、什么是套接字
    • 实现网络通信的两端就是套接字,分为服务器对应的套接字和客户端对应的套接字
    2、socket编程
    • 就是用程序实现服务器和客户端
    • python提供了一个socket标准库来实现socket编程
    服务器程序
    import socket
    # i.创建服务器对应的套接字对象
    # socket(faimliy,type)
    # faimliy: 设置ip类型(AF_INET默认为Ipv4,AF_INET6(ipv6))
    # type:# 设置传输类型(SOCK_STREAM默认值(TCP协议可靠传输),SOCK_STREAM=2(UDP不可靠传输))
    
    server = socket.socket()  # 创建一个基于ipv4的可靠传输的服务器套接字
    
    # 2.绑带ip地址和端口
    # bind((ip, 端口)) :参数时元祖(ip,端口)
    # ip:服务器的地址(字符串)
    # 端口:不同的端口用来区分不同的服务(端口就是应用程序的唯一标识),取值范围(0-65535),注意0-1024属于著名端口
    server.bind(('10.7.156.141', 8080))
    
    # 3、监听请求
    # listen(个数) : 通过数字设置服务一次可以处理多少个请求个数
    server.listen(512)
    print('开始监听')
    
    # 4、让服务器一直处于循环状态
    
    while True:
        # 5、接受请求
        # accept() 接受请求执行到accpet程序会停下来(阻塞线程),如果有客户端在请求这个服务器时才会往下执行。返回会哈和客户端的地址
        conversion, addr = server.accept()
        print(addr)
        # 6、服务器给客户端发送数据
        # send(data) 发送数据
        # data:需要发送的数据,要求是二进制数据(bytes)
        # str转二进制bytes
        # 方法一:
        # 语法:bytes(内容)
        # 方法二:
        # 字符串.encode(编码方式)
        message = input('>>>>')
        message_data = bytes(message, encoding='utf-8') # 类型转换
        conversion.send(message_data)
    
        # 7、接受客户端发送的消息
        # recv(字节数) 接受客户端发送的数据,参数是用来设置一次能就收的最大字节数
        # 注意:recv方法也会阻塞线程,也就是说程序运行到这里会停下来,等到对方发送消息为止
        # 返回接收到的数据(接收到二进制数据)
        # 如果接收到字符串(需要将二进制转换成字符串)
        # str(二进制, encoding='utf-8')
        # 二进制.decode(编码方式)
        data = conversion.recv(1024)
        # re_message = str(data, encoding='utf-8')
        re_message = data.decode('utf-8')
        print(re_message)
    

    三、socket客户端

    • 端口号:同一时间同一个端口只能绑定一个服务
    # 客户端
    import socket
    # 1、创建套接字对象
    client = socket.socket()
    
    # 2.连接服务器
    # connect((地址,端口))
    client.connect(('10.7.156.97', 8080))
    
    while True:
        # 4、给服务器发送消息
        message =  input('>>>')
        client.send(message.encode('utf-8'))
    
        # 3、接受服务器返回的服务器
        re_data = client.recv(1024)
        print('他说:', re_data.decode('utf-8'))
    
        if re_data == '拜拜':
            break
    
    # 服务器
    import socket
    
    # 1、创建服务器
    server = socket.socket()
    
    server.bind(('10.7.156.141', 8080))
    
    server.listen(100)
    
    while True:
        # 接受请求
        conversation, addr = server.accept()
        print(conversation)
        # 用于保持回话
        while True:
            message_re = conversation.recv(1024).decode('utf-8')
            print(('他说(%s):%s'%(addr[0][-2:], message_re)))
    
            # 发送消息
            message = input('>>>>')
            conversation.send(message.encode('utf-8'))
    
            if message == '拜拜':
                break
    

    五、HTTP和HTTPS

    • 1、URL:统一资源定位符,就是互联网上每个资源的唯一标识
    • 2、URL:协议://主机地址/路径
      协议:不同的协议,代表不同的资源查找方式、资源传输方式
    • 存放资源的主机(服务器)的ip地址(域名)
    • 路径:资源在主句中的相对路径
    2、常见协议
    • HTTP:超文本传输协议,访问远程的网络资源,开发中最常见的协议
    • file:访问本地计算机资源
    • mailto:访问电子邮件地址
    • FTP:访问的是共享主机的文件资源
    3、HTTP协议
    • 超文本传输协议
    • 作用:让客户端和服务器端能有效进行通讯,同时规定了客户端和服务器之间的数据传输格式
    4、HTTP特点
    • 简单快速
    • 灵活:允许传输各种各样的数据
    • 在0.9-1.0使用非持续连接:服务器对客户端的请求做出响应后就会自动断开连接
    5、HTTP通讯过程
    • 请求:客户端 到 服务器端
    • 响应:服务器端 到 客户端

    6、常见的状态码

    状态码 含义
    200 请求成功
    400 客户端请求语法错误,服务器不发解析
    404 NotFound 服务器无法根据客户端的请求找到资源
    500 服务器内部错误,无法完成请求

    六、学习request

    • python中没有一个标准库来支持网络请求,但目前有一个第三方库支持HTTP请求
    import requests
    # get(url, params)
    # url:请求地址
    # paams: 客户端给服务器发送数据(字典){参数名:值}
    url = 'https://www.apiopen.top/satinApi'
    # https://www.apiopen.top/satinApi?type=1&page=1
    response = requests.get(url, {'type':1, 'page':1})
    # 1.获取响应头
    # print(response.headers)
    
    # 2、获取响应体
    # 方式1:(二进制形式的响应体)
    data_bytes = response.content
    # print(data_bytes)
    
    # 方式2:(字符串形式)
    data_text = response.text
    print(data_text)
    
    # 方式3:(json格式对应的python数据)
    data_json = response.json()
    # print(data_json)
    

    相关文章

      网友评论

          本文标题:2018-10-24day19网络基础和网络编程基础

          本文链接:https://www.haomeiwen.com/subject/jopxtqtx.html