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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352