美文网首页
day17网络编程

day17网络编程

作者: KingJX | 来源:发表于2018-08-07 19:11 被阅读0次

    01-socketServer

    TCP_IP模型.png
    # -*- coding: utf-8 -*-
    # @Author: KingJX
    # @Date  : 2018/8/7 11:11
    

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

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

    import socket
    if __name__ == '__main__':
    

    1.创建服务器套接字对象

    • family: 确定服务器类型

      • AF_INET --> ipv4
        AF_INET6 --> ipv6
    • type: 确定传输协议类型

      • SOCK_STREAM -> TCP协议
        SOCK_DGRAM - > IP协议
        # server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
        server = socket.socket()
    

    2.绑定IP地址和端口

    • 地址格式:(IP地址字符串, 端口号)
      端口号是用来区分一个计算机中不同的服务,范围是0-65535;
      注意: 其中0-1024是'著名端口'用来绑定一些特俗服务的,一般不使用
      同一时间,一个端口只能绑定一个服务
        server.bind(('10.7.181.59', 8080))
    

    3.监听

    • 参数: 用来限制一次性能够接受的客户端请求数量
        server.listen(70)
    
        # 保证服务器处于一直启动的状态
        while True:
            # 4.接收客户的请求
            """
            accept()会阻塞线,到有客户端给这个服务器发送请求才会开始执行
            """
            client, addr = server.accept()
            # print(addr)
    
            # 5.给客户端发送信息
            """
            send(数据): 数据必须是二进制数据(bytes)类型
            字符串转二进制:
            bytes(字符串, encoding=编码方式)
            字符串.encode(encoding=编码方式)
            """
            client.send(bytes('你好', encoding='utf-8'))
            client.send('你也好'.encode())
    
            # with open('./3.jpg', 'rb') as f:
            #     img = f.read()
            # client.send(img)
    
    
            # 就收从客户端发来的消息
            """
            bufsize: 设置缓存大小(单位是字节)
            1024字节 -> 1K
            1024K -> 1M
            1024M -> 1G
            1024 -> 1T
            1024T -> 1P
            
            二进制(bytes)转换为字符串:
            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.close()
    

    02-socketClient

    import socket
    
    
    
    if __name__ == '__main__':
        # while True:
        # 1.创建套接字对象
        client = socket.socket()
        # 2.链接服务器
        client.connect(('10.7.181.177', 8081))
        #3.接收信息
        data = client.recv(1024)
        # datas = bytes()
        # # print(str(data, encoding='utf-8'))
        # i = 0
        # while data:
        #     datas += data
        #     i += 1
        #     print(i)
        #     data = client.recv(1024)
        # 
        # 
        # 
        # client.close()
        # with open('./3_7.jpg', 'wb') as f:
        #     f.write(datas)
        print(data.decode(encoding = 'utf-8'))
        str1 = input()
    

    03-serverClient

    import socket
    
    
    if __name__ == '__main__':
        # 1.创建对象
        server = socket.socket()
    
        # 2.绑定IP地址
        server.bind(('10.7.181.59', 8086))
    
        # 3.监听
        server.listen(50)
    
        # 保持服务器不关闭
        while True:
            conversation, addr = server.accept()
    
            # 让客户端和服务器一直处于连接的状态
            while True:
                # 发送消息
                message = input('>>>')
                conversation.send(message.encode())
    
                # 接收消息
                message_data = conversation.recv(1024)
                print(message_data.decode(encoding ='utf-8'))
    

    04-client

    import socket
    if __name__ == '__main__':
       # 1.创建套接字对象
       client = socket.socket()
    
       # 2.连接服务器
       client.connect(('10.7.181.59', 8086))
    
       while True:
           # 接收消息
           data = client.recv(1024)
           print(data.decode(encoding='utf-8'))
    
           # 发送消息
           message = input('>>>')
           client.send(message.encode(encoding='utf-8'))
    

    05-http

    服务器:(python)\java\ php等

    HTTP(为了可以让客户端和服务器能够进行有效的数据交流)

    客户端

    python中访问网络中的数据:第三方库request

    # import  requests
    
    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'
    
        # 2.发送请求
        """
        request(请求方式, 请求地址)
        返回值: 响应
        """
        response = request('GET', url)
    
        text = response.text
        print(text)
    
        json = response.json()
        print(json)
    
        content = response.content
        print(content)
    

    相关文章

      网友评论

          本文标题:day17网络编程

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