亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python網絡編程UDP協議分析

發布時間:2021-11-23 16:16:23 來源:億速云 閱讀:185 作者:iii 欄目:互聯網科技

這篇文章主要講解了“Python網絡編程UDP協議分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python網絡編程UDP協議分析”吧!

UDP協議概述

  • UDP協議——User Datagram Protocol,即用戶數據包協議,UDP協議是無連接、不可靠、高效率數據傳輸協議。

  • UDP協議優點:開銷小、速度快、無連接。

  • UDP協議缺點:無確認重傳和排序、無流控制、無錯誤恢復。

  • UDP協議是面向報文的傳輸協議,它對報文既不拆分也不合并,而是給報文添加頭部后就向下交給IP層。發現錯誤時不要重傳,只是簡單地把錯誤的報文扔掉、或給應用程序提供警告。

  • UDP協議廣泛運用在強調數據傳輸速率的多媒體應用領域,例如網絡聊天、在線視頻、網絡游戲、實時監控、路由協議中修改路由表等。

    • TCP協議遇到丟包或錯誤時要求重傳,因而導致傳輸速率大幅降低。

    • UDP協議遇到丟包或錯誤時不要求重傳,因為一個報文丟失后幾秒內會有新的報文替代它,所以UDP協議傳輸速率比TCP協議高很多。

    • 應用程序需要根據需要自定義應用層協議來處理報文丟失、錯誤、失序的情況。

  • 編寫UDP應用程序需要審慎考慮合適的報文長度:

    • 局域網最大傳輸單元(Maximum Transmission Unit,MTU)默認是1500字節。

    • UDP協議頭部是8字節、IP層協議頭部是20字節。

    • 單條報文建議長度是1024字節,最大長度不得超過65507字節(報文加頭部總長不得超過65535字節)。

    • 網絡環境較好時報文長度及接收緩存建議設大一些,可以減少報文接收不及時導致丟包的概率。

udp協議服務端

  1. 創建socket實例。

    sk = socket.socket(type=socket.SOCK_DGRAM)


    注意:type=socket.SOCK_DGRAM是指定關鍵字參數,不能“缺省type=”,該參數用來指定使用udp協議。

  2. 綁定ip和端口。

    sk.bind(('127.0.0.1',9001))


    說明:該方法有一個參數,類型是元組(元組的第一個元素是IP,第二個元素是端口)。無返回值。

  3. 從UDP客戶端收報文。

    message,addrress = sk.recvfrom(1024)


    說明:該方法參數是接收消息長度。返回值是元組,元組第一項是消息,第二項是ip及端口。

  4. 發送報文給UDP客戶端。

    sk.sendto(message,address)


    說明:該方法有二個參數,第一個參數是要發送的消息,必須是bytes型;第二個參數是元組(元組的第一個元素是IP,第二個元素是端口)。返回值是發送的字節數。

udp協議客戶端

  1. 創建socket實例。

    sk = socket.socket()


  2. 發報文給UDP服務端。

    sk.sendto(message.encode(),('127.0.0.1',9001))


    說明:該方法有二個參數,第一個參數是要發送的消息,必須是bytes型;第二個參數是元組(元組的第一個元素是IP,第二個元素是端口)。返回值是發送的字節數。

  3. 從UDP服務端收報文。

    message = sk.recv(1024).decode()


    說明:該方法參數是接收消息長度。返回值是消息。

案例:udp協議聊天室

  • 服務端

    import socket
    
    HOST = '127.0.0.1'  # IP地址PORT = 50007  # 端口max_connect = 5def main():accounts = {
         
         
         }with socket.socket(type=socket.SOCK_DGRAM) as sk:sk.bind((HOST, PORT))while True:msg, address = sk.recvfrom(1024)rev = msg.decode().split('|||')accounts[rev[0]] = addressif rev[1] in accounts:sk.sendto(msg, accounts[rev[1]])if __name__ == "__main__":main()


    說明:這個是UDP協議簡易聊天室服務端模型,服務端接收到客戶端發來的消息,會記錄客戶端的ip和端口以及賬號,并更新到字典中。遇到發往目標賬戶的消息在字典中時,會將信息轉發給目標賬戶,從而實現多人聊天功能。
    注意:代碼目前沒有緩存消息,當要發送的目標不在線時,該消息會被丟棄。

  • 客戶端

    import socketfrom threading import Threadimport sys
    
    HOST = '127.0.0.1'  # IP地址PORT = 50007  # 端口class Transceiver:def __init__(self, conn, server, account: str, target: str, buffer: int = 1024) -> None:self.conn = conn  # socket實例self.server = server  # 目標ip及端口self.buffer = buffer  # 緩存區大小self.path = (account + '|||' + target + '|||').encode()  # 己方賬號def send(self, message: str) -> None:"""發送消息"""if type(message) is str:  # 判斷消息類型message = message.encode()  # 將消息轉成bytes型,缺省參數是utf8編碼self.conn.sendto(self.path + message, self.server)  # 發送消息def recv(self):"""接收消息"""message, _ = self.conn.recvfrom(self.buffer)message = message.decode('utf8').split('|||')return message[1], message[2]  # 返回消息字符串def main():def send(m, message):m.send(message)def recv(m):while True:try:source, data = m.recv()print(f'收到"{source}"發來的信息:{data}')except:passwith socket.socket(type=socket.SOCK_DGRAM) as sk:account = input("請輸入你的賬號:")target = input("請輸入你想聊天的賬號:")m = Transceiver(sk, (HOST, PORT), account, target)t = Thread(target=recv, args=(m,))t.setDaemon(True)t.start()while True:message = input('請輸入你要發送的信息:')if not message:continueif message == 'q' or message == 'Q':sys.exit(0)Thread(target=send, args=(m, message)).start()if __name__ == "__main__":main()


    說明:這個是udp協議簡易聊天室客戶端模型,客戶端登錄時首先輸入自己的賬號和對方的賬號,然后進入循環,循環輸入發給對方賬號的消息,另開了子收獲進程接受服務端轉發來的消息。

感謝各位的閱讀,以上就是“Python網絡編程UDP協議分析”的內容了,經過本文的學習后,相信大家對Python網絡編程UDP協議分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉门市| 福安市| 茌平县| 景德镇市| 滨海县| 阿坝县| 新乡县| 九江县| 云南省| 本溪市| 台中县| 齐齐哈尔市| 淄博市| 南澳县| 东山县| 常山县| 博爱县| 汝州市| 湄潭县| 牙克石市| 含山县| 安远县| 濮阳市| 江陵县| 东阳市| 房山区| 萨迦县| 上林县| 明溪县| 台北市| 大英县| 沽源县| 米易县| 牙克石市| 兴义市| 遂川县| 礼泉县| 南皮县| 和平县| 自贡市| 枣强县|