day17網(wǎng)絡(luò)編程

1.socket

socket編程(套接字):指的就是通過代碼來實現(xiàn)通信的兩個端(服務(wù)器,客戶端)
socket一般可以基于TCP和UDP實現(xiàn)客戶端和服務(wù)器之間的可靠傳輸和不可靠傳輸

python中的內(nèi)置模塊socket可以支持socket編程

2.socketServer

2.1.創(chuàng)建服務(wù)器套接字對象


    family:確定服務(wù)器類型
        AF_INET --> ipv4
        AF_INEt6 --> ipv6
        
    type: 確定傳輸協(xié)議類型
        SOCK_STREAM --> TCP協(xié)議
        SOCK_DGRAM --> UDP協(xié)議  
    """
    # server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
    server = socket.socket()

2.2.綁定ip地址和端口

    地址個數(shù):(ip地址字符串, 端口號)
    端口號是用來區(qū)分一個計算機中不同的服務(wù),范圍0-65535:
    注意,1.其中0-1024是'著名端口',用來綁定一些特殊的服務(wù)的,一般不使用。
          2.同一時間一個端口只能綁定一個服務(wù)
          
    """
    server.bind(('10.7.181.81', 8080))
2.3.監(jiān)聽請求

"""
    參數(shù):用來限制一次性能夠接收客戶端請求的數(shù)量,
    """
    server.listen(50)
2.4.接收和發(fā)送數(shù)據(jù)

# 保證服務(wù)器一種處于啟動狀態(tài)
    while True:
        # 4.接收客戶端的請求
        """
        accept()會阻塞線程,當(dāng)有客戶端給服務(wù)器發(fā)送請求,才會開始執(zhí)行
        """
        client, addr = server.accept()
        print(addr)

        # 5.給客戶端發(fā)送消息
        """
        seng(數(shù)據(jù)):數(shù)據(jù)必須是二進制數(shù)據(jù)(bytes)類型
        字符串轉(zhuǎn)二進制:
            bytes(字符串, encoding='utf-8')
            字符串.encode()
        """
        test = input('>>>')
        client.send(test, encoding='utf-8')


        # client.send('HTTP/1.1.200 OK\r\n\r\n'.encode(encoding='utf-8'))
        # client.send(bytes('hello', encoding='utf-8'))
        # client.send('python'.encode(encoding='utf-8'))

        # 接收從客戶端發(fā)來的消息
        """
        bufsize:設(shè)置緩存大小(單位是字節(jié))
        1024字節(jié) -> 1k
        1024k -> 1M
        1024M -> 1G
        1024G -> 1T
        1024T -> 1P
        
        二進制(bytes)轉(zhuǎn)換字符串
        a.str(二進制數(shù)據(jù), encoding='utf-8')
        b.二進制數(shù)據(jù).decode(encoding='utf-8')
        """
        data = client.recv(1024)
        str1 = str(data, encoding='utf-8')
        str2 = data.decode(encoding='utf-8')
        print(str1)

        # 6.關(guān)閉連接
        client.close()

3.socketClient

import socket

if __name__ == '__main__':
    # 1.創(chuàng)建套接字對象
    client = socket.socket()

    # 2.連接服務(wù)器
    client.connect(('10.7.181.81', 8080))

    # 3.接收信息
    data = client.recv(1024)
    print('接收到服務(wù)器的數(shù)據(jù):', data.decode(encoding='utf-8'))

    # 4.發(fā)送信息
    test = input('請輸入:')
    client.send('test'.encode(encoding='utf-8'))

4 HTTP

服務(wù)器:python\java\php等
HTTP(為了可以讓客戶端和服務(wù)器能夠進行有效的數(shù)據(jù)交流)
URL:統(tǒng)一資源定位符,能找到互聯(lián)網(wǎng)上唯一的一個資源
URL的基本格式=協(xié)議://主機地址/路徑
客戶端:網(wǎng)頁(js)、ios設(shè)備上的軟件(OC/Swift)、安卓設(shè)備上的軟件(java)

file:訪問本地計算機上的資源,格式:file://(不用加主機地址)
HTTP:不管是移動客戶端還是pc端,訪問遠程的網(wǎng)絡(luò)資源經(jīng)常
使用HTTP協(xié)議
簡單快速
靈活(可以傳輸各種數(shù)據(jù))
請求方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT
GET的安全性比POST要差些,如果包含機密建議用POST
如果僅僅是索取數(shù)據(jù),使用GET
全用POST

# python中獲取網(wǎng)絡(luò)中的數(shù)據(jù);讀三方庫request
from requests import request
if __name__ == '__main__':
    # 1.確定URL
    # GET 請求:參數(shù)以?的形式拼接到url地址后面,參
    # 數(shù)名=值的形式,多個參數(shù)用&隔開
    # https://www.apiopen.top/satinApi?type=1&page=1
    url='https://www.apiopen.top/satinApi?type=1&page=1'
    # 2.發(fā)送請求
    '''
    request(請求方式,請求地址)
    '''
    response=request('GET',url)
    print(type(response),response)
    # 以字符串的形式獲取響應(yīng)體(服務(wù)器返回數(shù)據(jù))
    text=response.text
    print(type(text),text)
    # 以json的形式獲取響應(yīng)體
    json=response.json()
    print(type(json),json)
    # 以二進制的形式獲取響應(yīng)體
    content=response.content
    print(type(content),content)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,634評論 19 139
  • 1.基礎(chǔ)知識 1)服務(wù)器 提供數(shù)據(jù)web服務(wù)器游戲服務(wù)器軟件后臺服務(wù)器 2)客戶端 請求數(shù)據(jù)mac地址是上網(wǎng)設(shè)備的...
    曉曉的忍兒閱讀 280評論 0 6
  • 引言 網(wǎng)絡(luò)學(xué)習(xí)的核心內(nèi)容就是網(wǎng)絡(luò)協(xié)議的學(xué)習(xí) 網(wǎng)絡(luò)協(xié)議:網(wǎng)絡(luò)中進行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或者說是約定的集合因為不...
    _涼風(fēng)_閱讀 2,190評論 8 22
  • 6.1 公鑰密鑰加密原理 6.1.1 基礎(chǔ)知識 密鑰:一般就是一個字符串或數(shù)字,在加密或者解密時傳遞給加密/解密算...
    AndroidMaster閱讀 4,113評論 1 8
  • 從今天開始增加我的幽默感,快樂,幸福, 祥和,自信,勇敢,堅毅將成為我生命的常態(tài)。 我變的越來越有成就,善解人意,...
    關(guān)童幻閱讀 157評論 0 1

友情鏈接更多精彩內(nèi)容