30.3. 企業(yè)級(jí)開發(fā)進(jìn)階2.3:UDP編程

** 本節(jié)內(nèi)容如下**

  • 什么是UDP協(xié)議
  • UDP網(wǎng)絡(luò)編程——服務(wù)端程序開發(fā)
  • UDP網(wǎng)絡(luò)編程——客戶端程序開發(fā)

1.什么是UDP協(xié)議

回顧TCP協(xié)議:一個(gè)非常重要的數(shù)據(jù)傳輸協(xié)議勤婚,很多網(wǎng)絡(luò)協(xié)議都是以TCP協(xié)議為基礎(chǔ)的窜觉;TCP協(xié)議要求服務(wù)器和客戶端通過三次握手交互的方式建立可靠的連接,然后再進(jìn)行數(shù)據(jù)保溫的發(fā)送臊泌,在發(fā)送過程中保證數(shù)據(jù)包的順序和數(shù)量不會(huì)丟失匠楚,最后如果要斷開連接需要四次揮手的方式進(jìn)行連接的安全斷開画机。

UDP協(xié)議:是一種用戶數(shù)據(jù)報(bào)協(xié)議盛卡,是一種非連接的協(xié)議,傳輸數(shù)據(jù)之前服務(wù)端和客戶端之間不建立連接唆香,當(dāng)進(jìn)行數(shù)據(jù)傳送時(shí)就將應(yīng)用程序中的數(shù)據(jù)提取出來并放在網(wǎng)絡(luò)上嫌变;
發(fā)送端發(fā)送數(shù)據(jù),只是收到當(dāng)前應(yīng)用程序生成數(shù)據(jù)的速度躬它、計(jì)算能力和傳輸帶寬等因素的影響
接收端接收數(shù)據(jù)腾啥,UDP將消息放在一個(gè)消息隊(duì)列中,應(yīng)用程序從消息隊(duì)列中讀取消息

UDP特性:
1冯吓、傳輸數(shù)據(jù)不建立連接倘待,不需要維護(hù)連接狀態(tài),同一個(gè)服務(wù)端可以向多個(gè)客戶端廣播發(fā)送消息
2组贺、UDP數(shù)據(jù)包標(biāo)題8個(gè)字節(jié)凸舵,TCP需要20個(gè)字節(jié),額外開銷較小
3失尖、UDP是不可靠的傳輸協(xié)議啊奄,不保證所有的數(shù)據(jù)接收端完整并且正確的接收
4、UDP協(xié)議是面向報(bào)文的掀潮,發(fā)送端UDP直接將程序中的數(shù)據(jù)封裝成報(bào)文交給IP層進(jìn)行傳輸菇夸,所以需要我們?cè)诔绦蛑刑幚砗脠?bào)文數(shù)據(jù)的大小

關(guān)于TCP和UDP那點(diǎn)事兒
1、基于連接和非連接的
2仪吧、對(duì)系統(tǒng)資源的消耗多和少
3庄新、TCP程序結(jié)構(gòu)復(fù)雜、UDP程序結(jié)構(gòu)簡單明了
4薯鼠、數(shù)據(jù)流模式的數(shù)據(jù)和數(shù)據(jù)報(bào)模式的數(shù)據(jù)
5择诈、TCP是可靠的傳輸協(xié)議鬓椭,UDP是不可靠的傳輸協(xié)議

2.UDP編程API簡單了解


socket(family, type):用于表示網(wǎng)絡(luò)連接的socket對(duì)象
family:socket.AF_INET用于表示使用IPv4地址
type:socket.SOCK_DGRAM表示使用數(shù)據(jù)報(bào)模式


s.bind((ip, port)):用于將套接字對(duì)象s和對(duì)應(yīng)ip的主機(jī)及端口port綁定
注意:參數(shù)是一個(gè)元組


s.recvfrom(buffer):用于從socket中接收數(shù)據(jù)的方法
參數(shù)buffer:用于接收數(shù)據(jù)的緩沖區(qū)大小
返回值:得到客戶端發(fā)送的消息和客戶端的主機(jī)地址等信息


s.sendto(data, address):用于發(fā)送數(shù)據(jù)的方法
參數(shù)data:要發(fā)送的數(shù)據(jù)
參數(shù)address:數(shù)據(jù)發(fā)送的目的地地址


s.close()用于關(guān)閉套接字對(duì)象
使用完之后蒿讥,一定要記得關(guān)閉網(wǎng)絡(luò)套接字對(duì)象搭独,釋放系統(tǒng)資源哦


3. UDP服務(wù)端編程

和TCP網(wǎng)絡(luò)編程一樣郁竟,首先我們先開發(fā)服務(wù)端程序
服務(wù)端的程序開發(fā)步驟:首先創(chuàng)建表示網(wǎng)絡(luò)傳輸?shù)奶捉幼謱?duì)象socket()叔收;其次綁定對(duì)應(yīng)的主機(jī)IP地址和端口號(hào)光戈;接下來就可以進(jìn)行消息的收發(fā)處理了控硼;最后關(guān)閉套接字對(duì)象釋放系統(tǒng)資源

UDP服務(wù)端編程
# 引入socket模塊
import socket

# 創(chuàng)建socket對(duì)象
sc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 綁定主機(jī)端口
sc.bind(("", 9999))

# 開始收發(fā)消息
data = True
while data:
    # 接收客戶端發(fā)送的消息
    data, addr = sc.recvfrom(1024)
    if "bye" == data.decode("UTF-8"):
        print("結(jié)束通話")
        break
    print("客戶端發(fā)來消息:%s" % data.decode("UTF-8"))

    # 發(fā)送消息
    data = input("請(qǐng)輸入要發(fā)送給客戶端的消息:")
    sc.sendto(data.encode("UTF-8"), addr)

# 關(guān)閉套接字對(duì)象
sc.close()

4. UDP客戶端編程

相對(duì)于服務(wù)端的編程漱牵,客戶端編程非常簡單暇仲,創(chuàng)建一個(gè)連接服務(wù)器的套接字對(duì)象步做,就可以直接進(jìn)行數(shù)據(jù)收發(fā)處理了

UDP客戶端編程處理
import socket
# 創(chuàng)建socket套接字對(duì)象
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 開始收發(fā)消息
data = input("請(qǐng)輸入要發(fā)送給服務(wù)器的消息:")
while data:
    # 發(fā)送消息
    client.sendto(data.encode("UTF-8"), ("192.168.10.108", 9999))

    # 接收消息
    data, addr = client.recvfrom(2014)
    if "bye" == data.decode("UTF-8"):
        print("結(jié)束通話")
        break;
    print("服務(wù)器%s發(fā)來消息:%s" % (addr, data.decode("UTF-8")))
    data = input("請(qǐng)輸入要發(fā)送給服務(wù)器的消息:")

# 關(guān)閉套接字對(duì)象
client.close()

運(yùn)行上面的服務(wù)端程序和客戶端程序,就可以實(shí)現(xiàn)服務(wù)端和客戶端之間的數(shù)據(jù)通信了奈附。和TCP不同的是全度,大家可以通過上面的程序進(jìn)行測試,當(dāng)服務(wù)端或者客戶端一方的程序結(jié)束時(shí)斥滤,不會(huì)影響另一方的程序運(yùn)行将鸵。


老黃歷:農(nóng)歷五月初六
[宜]
晚上加班
晚上是程序員精神最好的時(shí)候
瀏覽成人網(wǎng)站
重拾對(duì)生活的信心
提交代碼
遇到?jīng)_突的幾率是最低的
開會(huì)
寫代碼之余放松一下打個(gè)盹,有益健康

座位朝向:面向西南方寫程序佑颇,BUG 最少顶掉。
今日宜飲:茶,綠茶
女神親近指數(shù):★★★★★



大牧莫邪.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挑胸,一起剝皮案震驚了整個(gè)濱河市痒筒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茬贵,老刑警劉巖簿透,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異解藻,居然都是意外死亡老充,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門舆逃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚂维,“玉大人,你說我怎么就攤上這事路狮〕嫔叮” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵奄妨,是天一觀的道長涂籽。 經(jīng)常有香客問我,道長砸抛,這世上最難降的妖魔是什么评雌? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任树枫,我火速辦了婚禮,結(jié)果婚禮上景东,老公的妹妹穿的比我還像新娘砂轻。我一直安慰自己,他們只是感情好斤吐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布搔涝。 她就那樣靜靜地躺著,像睡著了一般和措。 火紅的嫁衣襯著肌膚如雪庄呈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天派阱,我揣著相機(jī)與錄音诬留,去河邊找鬼。 笑死贫母,一個(gè)胖子當(dāng)著我的面吹牛文兑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颁独,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼彩届,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了誓酒?” 一聲冷哼從身側(cè)響起樟蠕,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靠柑,沒想到半個(gè)月后寨辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歼冰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年靡狞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隔嫡。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甸怕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腮恩,到底是詐尸還是另有隱情梢杭,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布秸滴,位于F島的核電站武契,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咒唆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一届垫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧全释,春花似錦装处、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至糟袁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躺盛,已是汗流浹背项戴。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槽惫,地道東北人周叮。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像界斜,于是被迫代替她去往敵國和親仿耽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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