美文网首页
day17 网络编程 2018-08-07

day17 网络编程 2018-08-07

作者: LPP27149 | 来源:发表于2018-08-07 18:46 被阅读0次

    -- coding: utf-8 --

    """

    File Name: 01
    Author : LPP
    E-mail : l.piaopiao@qq.com
    date: 2018/8/7


    Change Activity:
    2018/8/7:


    socket编程(套接字): 指的是通过代码来创建实现通信的两个端(服务端和客户端)
    socket一般可以基于TCP和UDP实现客户端和服务器之间的可靠传输和不可靠传输

    python中的内置模块可以支持socket编程

    创建一个服务器

    import socket
    
    if __name__ == '__main__':
        # 1. 创建服务器套接字对象
        """
        family: 确定服务类型
        AF_INET --> ipv4
        AF_INET --> ipv6
        type: 确定传输协议类型
            SOCK_STEAM -> TCP协议
            SOCK_DGRAM -> UDP协议
        """
        server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
    
        # 2. 绑定IP地址和端口
        """
        地址格式:('ip地址字符串', 端口号)
        端口号是用来区分一个计算机中不同的服务, 范围是(0 - 65535); 
        注意: 1. 其中0 - 1024 是著名端口, 用来绑定一些特殊服务.
              2. 同一时间一个端口只能绑定一个服务
        """
        server.bind(('10.7.181.77', 45678))
    
        # 3. 监听请求
        """
        参数: 用来限制一次性能够接收的客服端的请求数量
        """
        server.listen(50)
        print('开始监听请求')
    
        # 保证服务器处于一直启动的状态
        while True:
            # 4. 接收客户端的请求
            """
            accept()会阻塞线程, 直到有客户端向此服务器发出请求, 才会开始执行
            """
            client, addr = server.accept()
            print(addr)
    
            # 5. 给客户端发送消息
            """
            send(数据): 数据必须是二进制数据(bytes)类型
            
            字符串转二进制:
            a. bytes(字符串, encoding=编码方式)
            b. 字符串.encode(encoding=编码方式)
            """
            #
    
            # client.send(bytes('QAQ', encoding='utf-8'))
            # client.send('Six Six Six'.encode(encoding='utf-8'))
    
            # 接收从客户端发来的消息
            """
            bufsize: 设置缓存大小(单位是字节)
            
            二进制转换成字符串:
            a. str(二进制数据, encoding='utf-8')
            b. 二进制数据.decode(encoding='utf-8)
            
            """
            data = client.recv(1024)
            str1 = str(data, encoding='utf-8')
            # str2 = data.decode(encoding='utf-8')
            print(str1)
    
            client.send(bytes('QAQ', encoding='utf-8'))
            # client.send('Six Six Six'.encode(encoding='utf-8'))
    
            # 6. 关闭连接
            client.close()
    


    创建一个客户端
    import socket
    
    
    if __name__ == '__main__':
        # 1. 创建套接字对象
        client = socket.socket()
    
        # 2. 连接服务器
        client.connect(('10.7.181.110', 61516))
    
        # 3. 接收信息
        # data = client.recv(1024)
        # print('接收到服务器的数据', data.decode(encoding='utf-8'))
    
        # 4. 发送数据
        while True:
            data = client.recv(1024)
            print('接收到服务器的数据', data.decode(encoding='utf-8'))
            str1 = input('>>>')
            if str1 == '0':
                break
            client.send(str1.encode(encoding='utf-8'))
    
    • URL: 统一资源定位符
    • python访问网络中的数据

    网络请求

    from requests import request
    if __name__ == '__main__':
        # https://www.apiopen.top/satinApi?type=1&page=1
        # GET请求: 参数以?号的形式拼接到URL后面, 参数名=值的形式, 多个参数以&隔开
        # 1. 确定URL
        url = 'https://www.apiopen.top/satinApi?type=1&page=1'
    
        # 2.发出请求
        """
        request(请求方式, 请求地址)
        """
        response = request('GET', url)
        # 1. 以字符串形式获取响应体
        text = response.text
        print(type(text), text)
    
        # 2. 以json形式获取响应体
        json = response.json()
        print(type(json), json)
    
        # 3. 以二进制形式获取响应体
        content = response.content
        print(type(content), content)
    

    相关文章

      网友评论

          本文标题:day17 网络编程 2018-08-07

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