电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解python UDP 編程

瀏覽:12日期:2022-07-13 10:40:06

前面我們講了 TCP 編程,我們知道 TCP 可以建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。本文我們?cè)賮?lái)介紹另一個(gè)常用的協(xié)議?UDP。相對(duì)TCP,UDP則是面向無(wú)連接的協(xié)議。

UDP 協(xié)議

我們來(lái)看 UDP 的定義:

UDP 協(xié)議(User Datagram Protocol),中文名是用戶數(shù)據(jù)報(bào)協(xié)議,是 OSI(Open System Interconnection,開(kāi)放式系統(tǒng)互聯(lián)) 參考模型中一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。

從這個(gè)定義中,我們可以總結(jié)出 UDP 的幾個(gè)特點(diǎn)以及其與 TCP 的區(qū)別:

UDP 是用戶數(shù)據(jù)報(bào)協(xié)議,傳輸模式是數(shù)據(jù)報(bào),而 TCP 是基于字節(jié)流的傳輸協(xié)議。 UDP 是無(wú)連接的協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的。 UDP 是簡(jiǎn)單不可靠的協(xié)議,它不提供可靠性,只是把數(shù)據(jù)包發(fā)送出去,并不保證能夠到達(dá)目的地。由于它不需要在客戶端和服務(wù)端之間建立連接,也沒(méi)有超時(shí)重發(fā)機(jī)制,所以傳輸速度很快。

從以上特點(diǎn),我們可以看到 UDP 適合應(yīng)用在每次傳輸數(shù)據(jù)量小、對(duì)數(shù)據(jù)完整性要求不高、對(duì)傳輸速度要求高的領(lǐng)域。這里面最典型的就是即時(shí)通信的場(chǎng)景,微信是一個(gè)很常見(jiàn)的例子。相信大家在使用微信的時(shí)候都遇到過(guò)先發(fā)的消息后收到,或者有些發(fā)送的消息對(duì)方?jīng)]有收到的情況吧,這就是 UDP 協(xié)議典型的特點(diǎn),不保證傳輸數(shù)據(jù)的完整性和順序性。除此之外, UDP 還應(yīng)用在在線視頻、網(wǎng)絡(luò)電話等場(chǎng)景。

UDP 傳輸過(guò)程

我們?cè)谥v TCP 的時(shí)候,我們說(shuō) TCP 客戶端和服務(wù)端必須先連接才可以傳輸數(shù)據(jù):客戶端先請(qǐng)求連接服務(wù)器,服務(wù)器接受連接請(qǐng)求,然后雙方才可以通信。在 UDP 協(xié)議里,客戶端只需要知道服務(wù)器的地址和端口號(hào),就可以直接發(fā)送數(shù)據(jù)了。

我們來(lái)看下 UDP 傳輸?shù)牧鞒虉D:

詳解python UDP 編程

UDP服務(wù)器的建立可以歸納這幾步:

創(chuàng)建 socket(套接字) 綁定 socket 的 IP 地址和端口號(hào) 接收客戶端數(shù)據(jù) 關(guān)閉連接

udp客戶端的創(chuàng)建可總結(jié)為這幾步:

創(chuàng)建 socket(套接字) 向服務(wù)器發(fā)送數(shù)據(jù) 關(guān)閉連接

這里需要注意的是 UDP 客戶端連接到服務(wù)器的 IP 和端口號(hào)必須是 UDP 服務(wù)器的 IP 和監(jiān)聽(tīng)的端口號(hào),服務(wù)器服務(wù)器只需要綁定 IP 和端口號(hào),就可以時(shí)刻準(zhǔn)備接收客戶端發(fā)送的數(shù)據(jù),此時(shí)服務(wù)器處于阻塞狀態(tài),直到接收到數(shù)據(jù)為止。

UDP 客戶端

創(chuàng)建 socket,可以這樣做:

# 導(dǎo)入socket庫(kù)import socket# 創(chuàng)建一個(gè)sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

創(chuàng)建 socket 時(shí),第一個(gè)參數(shù) socket.AF_INET 表示指定使用 IPv4 協(xié)議,如果要使用 IPv6 協(xié)議,就指定為 socket.AF_INET6。SOCK_DGRAM 指定基于 UDP 的數(shù)據(jù)報(bào)式 Socket 通信。

創(chuàng)建了 socket 之后,我們就可以向目標(biāo)地址發(fā)送數(shù)據(jù)報(bào)了:

# 發(fā)送數(shù)據(jù)s.sendto(b’Hello Server’, (’127.0.0.1’, 6000))

第一個(gè)參數(shù)是需要發(fā)送的數(shù)據(jù)報(bào)內(nèi)容,第二個(gè)參數(shù)是 IP 地址和端口號(hào)的二元組。

如果是接收數(shù)據(jù)的話,我們可以這樣寫(xiě):

# 接收數(shù)據(jù)data, addr = s.recv(1024)# 解碼接收到的數(shù)據(jù)data = data.decode(’utf-8’)

接收信息的時(shí)候,第一個(gè) data 表示接收到的數(shù)據(jù), addr 是對(duì)方的 IP 地址和端口號(hào)的二元組。

想要關(guān)閉 socket,直接調(diào)用 close() 方法即可:

# 關(guān)閉 socketsocket.close()

UDP 服務(wù)器

相比于客戶端,服務(wù)器端只是多了一個(gè)步驟,在創(chuàng)建 socket 之后,需要綁定一個(gè) IP 地址和端口號(hào),以便接收客戶端隨時(shí)可能發(fā)送過(guò)來(lái)的數(shù)據(jù)。綁定的方法為:

# 綁定 IP 和端口s.bind((’127.0.0.1’, 6000))

UDP 簡(jiǎn)單實(shí)例

我們通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)體會(huì)下 UDP 的客戶端和服務(wù)器的通信流程。

服務(wù)器代碼為:

import socket# 創(chuàng)建 socketsk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定 IP 和端口號(hào)sk.bind((’127.0.0.1’, 6000))while True: # 接收數(shù)據(jù)報(bào) msg, addr = sk.recvfrom(1024) # 打印 print(’來(lái)自[%s:%s]的消息: %s’ % (addr[0], addr[1], msg.decode(’utf-8’))) # 等待輸入 inp = input(’>>>’) # 發(fā)送數(shù)據(jù)報(bào) sk.sendto(inp.encode(’utf-8’), addr)# 關(guān)閉 socketsk.close()

這里,我們先創(chuàng)建 socket,然后綁定本機(jī)的6000端口,然后等待接收客戶端發(fā)送的數(shù)據(jù)報(bào),接收到數(shù)據(jù)后將數(shù)據(jù)內(nèi)容打印在控制臺(tái)。然后可以在控制臺(tái)輸入回復(fù)內(nèi)容,發(fā)送給客戶端。

客戶端代碼:

import socket# 創(chuàng)建 socketsk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)addr = (’127.0.0.1’, 6000)while True: # 等待輸入 msg = input(’>>>’) # 發(fā)送數(shù)據(jù)報(bào) sk.sendto(msg.encode(’utf-8’), addr) # 接收數(shù)據(jù)報(bào) msg_recv, addr = sk.recvfrom(1024) # 打印 print(msg_recv.decode(’utf-8’))# 關(guān)閉 socketsk.close()

在客戶端代碼中,我們就只是創(chuàng)建 socket,然后在控制臺(tái)輸入需要向服務(wù)器發(fā)送的內(nèi)容,通過(guò) sentto() 方法發(fā)送給服務(wù)器,然后接收服務(wù)器返回的內(nèi)容,將接收的內(nèi)容打印到控制臺(tái)。

分別運(yùn)行客戶端和服務(wù)器代碼,然后我們?cè)诳蛻舳说目刂婆_(tái)輸入 “hello server”,我們可以看到服務(wù)器的控制臺(tái)打印了客戶端發(fā)送的內(nèi)容,然后我們?cè)诜?wù)器控制臺(tái)輸入 “hello client”,同樣在客戶端控制臺(tái)可以看你到內(nèi)容。

下面是客戶端的控制臺(tái)內(nèi)容:

>>>hello serverhello client>>>

下面是服務(wù)器的控制臺(tái)內(nèi)容:

來(lái)自[127.0.0.1:61207]的消息: hello server>>>hello client

這個(gè)實(shí)例其實(shí)就是一個(gè)簡(jiǎn)單的聊天模型,客戶端和服務(wù)器就像兩個(gè)人一樣可以發(fā)送和接收對(duì)方的信息。

那么多人群聊怎么實(shí)現(xiàn)呢?簡(jiǎn)單來(lái)說(shuō),我們需要設(shè)置一臺(tái)中心服務(wù)器,我們每個(gè)人發(fā)送的內(nèi)容都先發(fā)送到中心服務(wù)器,然后中心服務(wù)器再轉(zhuǎn)發(fā)到每個(gè)群聊的人。

總結(jié)

本文為大家介紹了 UDP 編程的基本原理以及通過(guò) Python 實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的聊天程序來(lái)模擬 UDP 通信的過(guò)程。通過(guò)本文的學(xué)習(xí),我們需要對(duì) UDP 協(xié)議有基本的認(rèn)識(shí),以及對(duì) UDP 的通信過(guò)程比較熟悉。

以上就是詳解python UDP 編程的詳細(xì)內(nèi)容,更多關(guān)于python UDP 編程的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 重庆私家花园设计-别墅花园-庭院-景观设计-重庆彩木园林建设有限公司 | 南京办公用品网-办公文具用品批发-打印机耗材采购 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | 技德应用| 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | 工程管道/塑料管材/pvc排水管/ppr给水管/pe双壁波纹管等品牌管材批发厂家-河南洁尔康建材 | 浙江自考_浙江自学考试网| 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 膜结构_ETFE膜结构_膜结构厂家_膜结构设计-深圳市烨兴智能空间技术有限公司 | 快速卷帘门_硬质快速卷帘门-西朗门业 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 万家财经_财经新闻_在线财经资讯网| 深圳法律咨询【24小时在线】深圳律师咨询免费 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 |