Day17-網(wǎng)絡(luò)工程

1.


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

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

import socket

# 通過socket實(shí)現(xiàn)服務(wù)器端

if __name__ == '__main__':
    # 1. 創(chuàng)建服務(wù)器套接字對(duì)象
    """
    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. 綁定ip地址和端口
    """
    地址格式:(ip地址字符串, 端口號(hào))
    端口號(hào)是用來區(qū)分一個(gè)計(jì)算機(jī)中不同的服務(wù),范圍是0-65535罐孝;
    注意:1.其中0-1024是'著名端口'用來綁定一些特殊的服務(wù)的暴区,一般不使用旦万。
         2.同一時(shí)間一個(gè)端口只能綁定一個(gè)服務(wù)
    """
    server.bind(('10.7.181.117', 8081))

    # 3. 監(jiān)聽
    """
    參數(shù):用來限制一次性能夠接受的客服端請(qǐng)求數(shù)量
    """
    server.listen(50)
    print('開始監(jiān)聽請(qǐng)求')

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

        # 5.給客戶端發(fā)送消息
        """
        send(數(shù)據(jù)):數(shù)據(jù)必須是二進(jìn)制數(shù)據(jù)(bytes)類型
        
        字符串轉(zhuǎn)二進(jìn)制:
        bytes(字符串,encoding=編碼方式)
        字符串.encode(encoding=編碼方式)
        """
        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())

        # 接收從客戶端發(fā)來的消息
        """
        bufsize:設(shè)置緩存大需厩馈(單位是字節(jié))
        1024字節(jié) -> 1k
        1024k -> 1M
        1024M -> 1G
        1024G -> 1T
        1024T - 1P
        
        二進(jìn)制(bytes)轉(zhuǎn)換字符串:
        a. str(二進(jìn)制數(shù)據(jù), encoding='utf-8')
        b. 二進(jìn)制數(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()

2.


import socket

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

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

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


    # 4.發(fā)送信息
    str1 = input('>>>')
    client.send(str1.encode(encoding='utf-8'))

    client.close()

3.


import socket

if __name__ == '__main__':
    # 1.創(chuàng)建對(duì)象
    server = socket.socket()

    # 2.綁定地址
    server.bind(('10.7.181.117', 12345))

    # 3.監(jiān)聽
    server.listen(50)

    # 保持服務(wù)器不關(guān)閉
    while True:
        conversation, addr = server.accept()
        print(addr)

        # 讓客戶端和服務(wù)器一直處于連接的狀態(tài)
        while True:
            # 發(fā)送消息
            message = input('>>>')
            conversation.send(message.encode())

            # 接收消息
            message_data = conversation.recv(1024)
            print(message_data.decode(encoding='utf-8'))

4.


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

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

    while True:
        # 接收消息
        data = client.recv(1024)
        print(data.decode(encoding='utf-8'))

        # 發(fā)送消息
        message = input('>>>')
        client.send(message.encode())


5.


import socket

if __name__ == '__main__':
    server = socket.socket()
    server.bind(('10.7.181.117', 8081))
    server.listen(10)

    while True:
        conversation, addr = server.accept()
        print(addr)

        # 發(fā)送一張圖片
        with open('./luffy2.png', 'rb') as f:
            data = f.read()
        conversation.send(data)


        conversation.close()


6.


import socket

if __name__ == '__main__':
    client = socket.socket()
    client.connect(('10.7.181.117', 8081))

    # 接收數(shù)據(jù)印叁,因?yàn)閳D片數(shù)據(jù)較大,可能會(huì)分多次發(fā)送
    image_data = bytes()  # 創(chuàng)建一個(gè)空的bytes用來保存整個(gè)圖片數(shù)據(jù)
    data = client.recv(1024)
    while data:
        image_data += data
        data = client.recv(1024)

    # 保存圖片到本地
    with open('./image.png', 'wb') as f:
        f.write(image_data)

    client.close()

7.


"""
服務(wù)器:(python)\java\php等等

HTTP(為了可以讓客戶端和服務(wù)器能夠進(jìn)行有效的數(shù)據(jù)交流)


客戶端:網(wǎng)頁(yè)(js)榨汤、iOS設(shè)備上的軟件(OC/Swift)蠕搜、安卓設(shè)備上的軟件(java)
"""

"""
python中訪問網(wǎng)絡(luò)中的數(shù)據(jù):第三方庫(kù)requests
"""
from requests import request

if __name__ == '__main__':
    # https: // www.apiopen.top / satinApi?type = 1 & page = 1
    # GET請(qǐng)求:參數(shù)以?號(hào)的形式拼接到url地址后面收壕,參數(shù)名=值的形式妓灌,多個(gè)參數(shù)用&隔開
    # 1.確定url
    url = 'https://www.apiopen.top/satinApi?type=1&page=1'

    # 2.發(fā)送請(qǐng)求
    """
    request(請(qǐng)求方式,請(qǐng)求地址)
    返回值:響應(yīng)
    """
    response = request('GET', url)
    print(type(response), response)

    # 1.以字符串的形式獲取響應(yīng)體(服務(wù)器返回的數(shù)據(jù))
    text = response.text
    print(type(text), text)

    # 2.以json的形式獲取響應(yīng)體
    json = response.json()
    print(type(json),json)

    # 3.以二進(jìn)制的形式獲取響應(yīng)體
    content = response.content
    print(type(content), content)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜜宪,隨后出現(xiàn)的幾起案子虫埂,更是在濱河造成了極大的恐慌,老刑警劉巖圃验,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掉伏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡澳窑,警方通過查閱死者的電腦和手機(jī)斧散,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摊聋,“玉大人鸡捐,你說我怎么就攤上這事÷椴茫” “怎么了箍镜?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵瞻鹏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鹿寨,道長(zhǎng)新博,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任脚草,我火速辦了婚禮赫悄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馏慨。我一直安慰自己埂淮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布写隶。 她就那樣靜靜地躺著倔撞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慕趴。 梳的紋絲不亂的頭發(fā)上痪蝇,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音冕房,去河邊找鬼躏啰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耙册,可吹牛的內(nèi)容都是我干的给僵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼详拙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帝际!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饶辙,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤蹲诀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后畸悬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侧甫,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蹋宦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咒锻。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冷冗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惑艇,到底是詐尸還是另有隱情蒿辙,我是刑警寧澤拇泛,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站思灌,受9級(jí)特大地震影響俺叭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泰偿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一熄守、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耗跛,春花似錦裕照、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至羔砾,卻和暖如春负间,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姜凄。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工唉擂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檀葛。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓玩祟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親屿聋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子空扎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容