天天操天天拍-天天操天天射天天-天天操天天射天天操-天天操天天添-欧美乱码伦视频免费-欧美乱一级在线观看

您現(xiàn)在所在的位置:首頁 >學(xué)習(xí)資源 > Python全棧+人工智能入門教材 > Python基礎(chǔ)入門教程30.3:企業(yè)級開發(fā)進階 UDP編程

Python基礎(chǔ)入門教程30.3:企業(yè)級開發(fā)進階 UDP編程

來源:奇酷教育 發(fā)表于:

本節(jié)內(nèi)容如下什么是UDP協(xié)議UDP網(wǎng)絡(luò)編程——服務(wù)端程序開發(fā)UDP網(wǎng)絡(luò)編程——客戶端程序開發(fā)1 什么是UDP協(xié)議回顧TCP協(xié)議:一個非常重要的數(shù)據(jù)

本節(jié)內(nèi)容如下
  • 什么是UDP協(xié)議
  • UDP網(wǎng)絡(luò)編程——服務(wù)端程序開發(fā)
  • UDP網(wǎng)絡(luò)編程——客戶端程序開發(fā)

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

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

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

UDP特性:
1、傳輸數(shù)據(jù)不建立連接,不需要維護連接狀態(tài),同一個服務(wù)端可以向多個客戶端廣播發(fā)送消息
2、UDP數(shù)據(jù)包標(biāo)題8個字節(jié),TCP需要20個字節(jié),額外開銷較小
3、UDP是不可靠的傳輸協(xié)議,不保證所有的數(shù)據(jù)接收端完整并且正確的接收
4、UDP協(xié)議是面向報文的,發(fā)送端UDP直接將程序中的數(shù)據(jù)封裝成報文交給IP層進行傳輸,所以需要我們在程序中處理好報文數(shù)據(jù)的大小

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

2.UDP編程API簡單了解


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


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


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


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


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


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

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


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

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

# 綁定主機端口
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("請輸入要發(fā)送給客戶端的消息:")
    sc.sendto(data.encode("UTF-8"), addr)

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

4. UDP客戶端編程

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


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

# 開始收發(fā)消息
data = input("請輸入要發(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("請輸入要發(fā)送給服務(wù)器的消息:")

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

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

 >>>更多VR/AR入門教程:VR入門


 
主站蜘蛛池模板: 免费观看成人久久网免费观看 | 免费一级视频在线播放 | 蜜桃bt天堂精品视频在线观看 | 福利午夜最新 | 国产资源在线看 | 国产精选91热在线观看 | 久操视频在线 | 国产精品免费网站 | 国产精品综合在线 | 看全色黄大色黄女片18 | 国产精品九九久久一区hh | 国产欧美日韩va | 国产欧美日韩中文久久 | 精品国产区一区二区三区在线观看 | 男女交性45分钟视频在线观看 | 国产精品四虎在线观看免费 | 国产在线看片护士免费视频 | 免费欧洲毛片a级视频 | 国产婷婷| 久久精品国产夜色 | 九九影院最新理论片 | 成人h视频在线 | 久爱成疾最新视频免费观看 | 蜜桃视频一区二区在线观看 | 大色综合色综合资源站 | 国产精品va| 国产成人综合欧美精品久久 | 久久青青草原精品国产不卡 | 国产a久久精品一区二区三区 | 久久久久成人精品免费播放动漫 | 久色乳综合思思在线视频 | 久久综合免费视频 | 国产日本久久久久久久久婷婷 | 国产中文字幕在线播放 | 久久亚洲伊人中字综合精品 | 国产精品99爱免费视频 | 国产在线a视频 | 韩国一级毛片a级免观看 | 国产免费a | 国产成品精品午夜视频 | 成人在线看片 |