2018-10-24 Day19網(wǎng)絡(luò)通信

01-socket服務(wù)器

socket又叫套接字椅文,實(shí)現(xiàn)網(wǎng)絡(luò)通信的兩端就是套接字站故。分為服務(wù)器對(duì)應(yīng)的套接字和客戶端對(duì)應(yīng)的套接字

python通過(guò)提供socket標(biāo)準(zhǔn)庫(kù)來(lái)支持socket編程屁擅。
socket編程就是用程序?qū)崿F(xiàn)服務(wù)器和客戶端

import socket
========寫(xiě)一個(gè)服務(wù)器程序=======

1.創(chuàng)建服務(wù)器對(duì)應(yīng)的套接字對(duì)象(買了一個(gè)座機(jī)機(jī)器)

socket(family, type)
family: 設(shè)置ip類型 AF_INET(ipv4) -> 默認(rèn)值 AF_INET6(ipv6)
type:設(shè)置傳輸類型 SOCK_STREAM(TCP可靠傳輸) -> 默認(rèn)值 SOCK_DGRAM(UDP不可靠傳輸)

server = socket.socket()  # 創(chuàng)建一個(gè)基于ipv4的可靠傳輸?shù)姆?wù)器套接字

2.綁定IP和端口(插電話線-確定電話號(hào)碼)

bind((ip, 端口))
ip: 服務(wù)器的地址
端口:不同的端口用來(lái)區(qū)分電腦上不同服務(wù)序宦。取值范圍是065535滥玷,注意01024屬于著名端口(用來(lái)綁定特殊服務(wù)端口辟癌,不要隨便用)
注意:同一時(shí)間同一個(gè)端口只能綁定一個(gè)服務(wù)

server.bind(('10.7.156.97', 8082))

3.監(jiān)聽(tīng)請(qǐng)求(交電話費(fèi))

listen(個(gè)數(shù)) --> 需要通過(guò)數(shù)字設(shè)置服務(wù)器一次可以處理最大的請(qǐng)求個(gè)數(shù)

server.listen(512)
print('開(kāi)始監(jiān)聽(tīng)')

4.讓服務(wù)一直處于啟動(dòng)狀態(tài)

while True:

5.接收客戶端的請(qǐng)求(電話響了寒屯,接電話)

執(zhí)行到accept(),程序會(huì)停下來(lái)黍少,直到有客戶端在請(qǐng)求這個(gè)服務(wù)器的時(shí)候才會(huì)往下執(zhí)行浩螺。返回會(huì)話和客戶端的地址

   conversation, addr = server.accept()
   print(addr)

6.服務(wù)器給客戶端發(fā)送數(shù)據(jù)(說(shuō)話)

send(data) --> 發(fā)送數(shù)據(jù)
data: 需要發(fā)送的數(shù)據(jù),要求是二進(jìn)制數(shù)據(jù)(bytes)

a.str 轉(zhuǎn) bytes:
bytes(字符串,encoding='utf-8)
字符串.encode(編碼方式)

    #message = input('>>>')
    ## message_data = bytes(message, encoding='utf-8')
    #message_data = message.encode('utf-8')
    #conversation.send(message_data)

    # 發(fā)送一張圖片
    with open('./files/luffy4.jpg', 'br') as f:
        content = f.read()
        conversation.send(content)
        # 關(guān)閉連接
        conversation.close()

7.接收客戶端發(fā)送的消息(聽(tīng)電話)

recv(字節(jié)數(shù)) --> 接收從客戶端發(fā)送的數(shù)據(jù)仍侥,參數(shù)是用來(lái)設(shè)置一次能接收的最大字節(jié)數(shù)要出。返回值是接收到的數(shù)據(jù)(二進(jìn)制)

bytes 轉(zhuǎn) 字符串
str(二進(jìn)制,encoding='utf-8')
二進(jìn)制.decode(編碼方式)

注意:recv方法也會(huì)阻塞線程,程序運(yùn)行到這兒會(huì)停下等农渊,等到對(duì)方發(fā)送消息為止

data = conversation.recv(1024)
# re_message = str(data, encoding='utf-8')
re_message = data.decode('utf-8')
print(re_message)

02-socket客戶端

1.創(chuàng)建客戶端套接字對(duì)象

client = socket.socket()

2.連接服務(wù)器

"""
connect(地址)
"""
client.connect(('10.7.156.97', 8080))

while True:

3.給服務(wù)器發(fā)送消息

    message = input('客戶端:')
    client.send(message.encode('utf-8'))
    if message == '拜拜':
        break

4.接收服務(wù)器返回的數(shù)據(jù)

    re_data = client.recv(1024)
    print('服務(wù)器:',re_data.decode('utf-8'))
    if re_data.decode('utf-8') == '拜拜':
        break

03-socket服務(wù)器升級(jí)

import socket

# 1.創(chuàng)建服務(wù)器套接字
server = socket.socket()
# 2.綁定地址
server.bind(('10.7.156.97', 8080))
# 3.監(jiān)聽(tīng)
server.listen(100)

# 讓服務(wù)器一直處于運(yùn)行狀態(tài)
while True:
    # 4.接收請(qǐng)求
    conversation, addr = server.accept()
    print(addr)
    # 保持通話
    while True:
        # 接收消息
        message_re = conversation.recv(1024).decode('utf-8')

        print('客戶端(%s): %s' % (addr[0][-2:], message_re))
        if message_re == '拜拜':
            break

        # 發(fā)送消息
        message = input('服務(wù)器:')
        conversation.send(message.encode('utf-8'))
        if message == '拜拜':
            break

04-接收?qǐng)D片的客戶端

import socket

client = socket.socket()
client.connect(('10.7.156.97', 8082))

message_re = client.recv(1024)
data = bytes()  # 創(chuàng)建一個(gè)空的二進(jìn)制數(shù)據(jù)
while message_re:

    # print(message_re)
    data += message_re  # 將每次獲取到的數(shù)據(jù)疊加
    # print('接收到數(shù)據(jù)')
    message_re = client.recv(1024)

with open('./new.jpg', 'bw') as f:
    f.write(data)
print('接收完成')

05-requst請(qǐng)求

python沒(méi)有一個(gè)標(biāo)準(zhǔn)庫(kù)來(lái)支持網(wǎng)絡(luò)請(qǐng)求患蹂,但是目前有一個(gè)第三方庫(kù),支持http請(qǐng)求

imp~~~ort requests
requests.get(url, params) --> 返回服務(wù)的響應(yīng)
url -> 請(qǐng)求地址
params -> 客戶端給服務(wù)發(fā)送的數(shù)據(jù)(字典) {參數(shù)名:值}

https://www.apiopen.top/satinApi?type=1&page=1

url = 'https://www.apiopen.top/satinApi'
response = requests.get(url, {'type': 1, 'page': 1})


## 1.獲取響應(yīng)頭

print(response.headers)

## 2.拿二進(jìn)制形式的響應(yīng)體

data_bytes = response.content
print(type(data_bytes))

## 3.拿字符串形式的響應(yīng)體

data_text = response.text
print(type(data_text), data_text)

## 4.拿json格式對(duì)應(yīng)python數(shù)據(jù)

data_json = response.json()
print(type(data_json), data_json['code'],)


## 下載圖片到本地

response = requests.get('http://wimg.spriteapp.cn/profile/large/2018/02/24/5a90448611639_mini.jpg')
content = response.content
with open('./aa.jpg', 'wb') as f:
f.write(content)















?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砸紊,一起剝皮案震驚了整個(gè)濱河市传于,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌醉顽,老刑警劉巖沼溜,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異游添,居然都是意外死亡系草,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門唆涝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)找都,“玉大人,你說(shuō)我怎么就攤上這事廊酣∧艹埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晓猛。 經(jīng)常有香客問(wèn)我饿幅,道長(zhǎng),這世上最難降的妖魔是什么戒职? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任栗恩,我火速辦了婚禮,結(jié)果婚禮上帕涌,老公的妹妹穿的比我還像新娘摄凡。我一直安慰自己,他們只是感情好蚓曼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布亲澡。 她就那樣靜靜地躺著,像睡著了一般纫版。 火紅的嫁衣襯著肌膚如雪床绪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天其弊,我揣著相機(jī)與錄音癞己,去河邊找鬼。 笑死梭伐,一個(gè)胖子當(dāng)著我的面吹牛痹雅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糊识,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绩社,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赂苗?” 一聲冷哼從身側(cè)響起愉耙,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拌滋,沒(méi)想到半個(gè)月后朴沿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡败砂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年赌渣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吠卷。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锡垄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祭隔,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布疾渴,位于F島的核電站千贯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搞坝。R本人自食惡果不足惜搔谴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桩撮。 院中可真熱鬧敦第,春花似錦、人聲如沸店量。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)融师。三九已至右钾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旱爆,已是汗流浹背舀射。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怀伦,地道東北人脆烟。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像房待,于是被迫代替她去往敵國(guó)和親邢羔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理吴攒,服務(wù)發(fā)現(xiàn)张抄,斷路器,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 網(wǎng)絡(luò)編程 一.楔子 你現(xiàn)在已經(jīng)學(xué)會(huì)了寫(xiě)python代碼,假如你寫(xiě)了兩個(gè)python文件a.py和b.py镣隶,分別去運(yùn)...
    go以恒閱讀 1,992評(píng)論 0 6
  • 學(xué)習(xí)書(shū)籍 JAVA編程思想(第四版)第20章 java SE5中引入的新特性之一极谊,并在java.lang中內(nèi)置了幾...
    yangc91閱讀 221評(píng)論 0 1
  • 離散數(shù)學(xué)中的二元關(guān)系 離散數(shù)學(xué)中的關(guān)系
    needrunning閱讀 338評(píng)論 0 0
  • 畢加索有一句名言轻猖,原話是Bad artists copy, Good artists steal;而天才產(chǎn)品人喬幫...
    4531265e0dae閱讀 3,469評(píng)論 0 0