Python网络基础之socket

一、socket

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

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

二、使用socket创建服务器

import socket


# 通过socket实现服务器端
if __name__ == '__main__':
    # 1.创建服务器套接字对象
    """
    family:确定服务类型
            AF_INET --- ipv4
            AF_INET6 --- ipv6
            
    type:确定传输协议类型
            SOCK_STREAM --- TCP --- 可靠传输
            SOCK_DGRAM --- UDP --- 不可靠传输
    """

    # server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

    # 默认ipv4的可靠传输
    server = socket.socket()

    # 2.绑定ip地址和端口
    """
    地址格式:(ip地址字符串,端口号)
    端口号用来区分一个计算机中不同的服务,范围是0-65535;
    注意:a.其中1-1024是'著名端口'用来绑定一些特殊的服务的
         b.同一时间一个端口只能绑定一个服务
    """
    server.bind(('10.7.181.51', 8080))

    # 3.监听
    """
    backlog:用来限制一次性能够接受的客户端请求的数量
    """
    server.listen(50)

    # 保证服务器一直处于启动的状态
    while True:
        # 4.接收客户端的请求
        """
        accept()会阻塞线程,到有客户端给这个服务器发送请求才会开始执行
        """
        client, address = server.accept()
        print(address)

        while True:

            # 5.给客户端发生消息
            """
            send(数据):数据必须是二进制数据(bytes)类型
            
            字符串转二进制:a.bytes(字符串, encoding=编码方式)
                          b.字符串.encode(编码方式)
            """

            content_server = input('>>>>>')
            client.send(content_server.encode(encoding='utf-8'))
            # client.send(bytes('hello python', encoding='utf-8'))

            # 接收从客户端发送的消息
            """
            buffersize:用来设置缓存的大小(单位是字节)
            1024字节 -- 1k
            1024k -- 1M
            1024M -- 1G
            1024G -- 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)

        # 6.关闭连接
        client.close()

三、创建客户端

import socket


if __name__ == '__main__':
    # 1.创建套接字
    client = socket.socket()

    # 2.连接服务器
    client.connect(('10.7.181.51', 8080))

    while True:

        # 3.接收信息
        data = client.recv(1024)
        print('接收到服务器的数据:', data.decode(encoding='utf-8'))

        # 4.发送信息
        content_client = input('>>>>>')
        client.send(content_client.encode(encoding='utf-8'))

四、图片的传输与接收

传输

import socket


if __name__ == '__main__':
    # 1.创建套接字
    client = socket.socket()

    # 2.连接服务器
    client.connect(('10.7.181.54', 8080))

    # 3.接收信息
    pic = bytes()
    data = client.recv(1024)
    while data:
        pic += data
        data = client.recv(1024)

    with open('./pic.jpg', 'wb') as f:
        f.write(pic)

接收

import socket


if __name__ == '__main__':
    # 1.创建对象
    server = socket.socket()

    # 2.绑定地址
    server.bind(('10.7.181.51', 8080))

    # 3.监听
    server.listen(50)

    conversation, address = server.accept()

    with open('./蕾姆酱.jpg', 'rb') as f:
        pic = f.read()

    conversation.send(pic)

五、http请求之GET

服务器:python\java\php等等

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

客户端:网页(js)\ios设备上的软件(oc/Swift)\安装设备上的软件(java)

URL的全称是Uniform Resource Locator(统一资源定位符)
基本格式:协议://主机地址/路径

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

import requests


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.发送请求
    """
    requests.request('GET', url)
    返回值:响应
    """
    response = requests.request('GET', url)
    print(response, type(response))

    # a.以字符串的形式获取响应体(服务器返回的数据)
    text = response.text
    print(type(text), text)

    # b.以json的形式获取响应体
    json = response.json()
    print(type(json), json)

    # c.以二进制的形式获取响应体
    content = response.content
    print(type(content), content)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。