日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python udp编程_Python UDP编程

發(fā)布時(shí)間:2023/12/31 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python udp编程_Python UDP编程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. UDP

UDP,用戶數(shù)據(jù)報(bào)傳輸協(xié)議,它位于TCP/IP協(xié)議的傳輸層,是一種無(wú)連接的協(xié)議,它發(fā)送的報(bào)文不能確定是否完整地到達(dá)了另外一端

TCP是建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。相對(duì)TCP,UDP則是面向無(wú)連接的協(xié)議。

使用UDP協(xié)議時(shí),不需要建立連接,只需要知道對(duì)方的IP地址和端口號(hào),就可以直接發(fā)數(shù)據(jù)包。但是,能不能到達(dá)就不知道了。

雖然用UDP傳輸數(shù)據(jù)不可靠,但它的優(yōu)點(diǎn)是和TCP比,速度快,對(duì)于不要求可靠到達(dá)的數(shù)據(jù),就可以使用UDP協(xié)議。

我們來(lái)看看如何通過(guò)UDP協(xié)議傳輸數(shù)據(jù)。和TCP類似,使用UDP的通信雙方也分為客戶端和服務(wù)器。服務(wù)器首先需要綁定端口

2. TCP/IP協(xié)議(族)

早期的計(jì)算機(jī)網(wǎng)絡(luò),都是由各廠商自己規(guī)定一套協(xié)議,IBM、Apple和Microsoft都有各自的網(wǎng)絡(luò)協(xié)議,互不兼容

為了把全世界的所有不同類型的計(jì)算機(jī)都連接起來(lái),就必須規(guī)定一套全球通用的協(xié)議,為了實(shí)現(xiàn)互聯(lián)網(wǎng)這個(gè)目標(biāo),互聯(lián)網(wǎng)協(xié)議簇(Internet Protocol Suite)就是通用協(xié)議標(biāo)準(zhǔn)。

因?yàn)榛ヂ?lián)網(wǎng)協(xié)議包含了上百種協(xié)議標(biāo)準(zhǔn),但是最重要的兩個(gè)協(xié)議是TCP和IP協(xié)議,所以,大家把互聯(lián)網(wǎng)的協(xié)議簡(jiǎn)稱TCP/IP協(xié)議

3. 端口

根據(jù)IP找到這臺(tái)電腦,根據(jù)端口port找到進(jìn)程。

端口號(hào)

在linux系統(tǒng)中,端口可以有65536(2的16次方)個(gè)之多!

既然有這么多,操作系統(tǒng)為了統(tǒng)一管理,所以進(jìn)行了編號(hào),這就是端口號(hào)

端口是通過(guò)端口號(hào)來(lái)標(biāo)記的,端口號(hào)只有整數(shù),范圍是從0到65535

知名端口(Well Known Ports)

知名端口是眾所周知的端口號(hào),范圍從0到1023

80端口分配給HTTP服務(wù)

21端口分配給FTP服務(wù)

可以理解為,一些常用的功能使用的號(hào)碼是估計(jì)的,好比 電話號(hào)碼110、10086、10010一樣

一般情況下,如果一個(gè)程序需要使用知名端口的需要有root權(quán)限

動(dòng)態(tài)端口(Dynamic Ports)

動(dòng)態(tài)端口的范圍是從1024到65535

之所以稱為動(dòng)態(tài)端口,是因?yàn)樗话悴还潭ǚ峙淠撤N服務(wù),而是動(dòng)態(tài)分配。

動(dòng)態(tài)分配是指當(dāng)一個(gè)系統(tǒng)進(jìn)程或應(yīng)用程序進(jìn)程需要網(wǎng)絡(luò)通信時(shí),它向主機(jī)申請(qǐng)一個(gè)端口,主機(jī)從可用的端口號(hào)中分配一個(gè)供它使用。

當(dāng)這個(gè)進(jìn)程關(guān)閉時(shí),同時(shí)也就釋放了所占用的端口號(hào)。

怎樣查看端口 ?

用“netstat -an”查看端口狀態(tài) 本地地址后面的就是端口號(hào)

C:\Users\Administrator>netstat -an

活動(dòng)連接

協(xié)議 本地地址 外部地址 狀態(tài)

TCP 0.0.0.0:135 0.0.0.0:0 LISTENING

TCP 0.0.0.0:443 0.0.0.0:0 LISTENING

TCP 0.0.0.0:445 0.0.0.0:0 LISTENING

TCP 0.0.0.0:902 0.0.0.0:0 LISTENING

TCP 0.0.0.0:912 0.0.0.0:0 LISTENING

TCP 0.0.0.0:1688 0.0.0.0:0 LISTENING

..............

..............

用“netstat -ano”查看端口狀態(tài),還有pid

C:\Users\Administrator>netstat -ano

活動(dòng)連接

協(xié)議 本地地址 外部地址 狀態(tài) PID

TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 904

TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 2268

TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4

TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 2056

TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 2056

TCP 0.0.0.0:1688 0.0.0.0:0 LISTENING 3648

TCP 0.0.0.0:2425 0.0.0.0:0 LISTENING 3016

4. ip地址

ip地址:用來(lái)在網(wǎng)絡(luò)中標(biāo)記一臺(tái)電腦的一串?dāng)?shù)字,比如192.168.1.1;在本地局域網(wǎng)上是惟一的。

ip地址的分類

每一個(gè)IP地址包括兩部分:網(wǎng)絡(luò)地址和主機(jī)地址

A類IP地址

一個(gè)A類IP地址由1字節(jié)的網(wǎng)絡(luò)地址和3字節(jié)主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“0”,

地址范圍1.0.0.1-126.255.255.254

二進(jìn)制表示為:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110

可用的A類網(wǎng)絡(luò)有126個(gè),每個(gè)網(wǎng)絡(luò)能容納1677214個(gè)主機(jī)

B類IP地址

一個(gè)B類IP地址由2個(gè)字節(jié)的網(wǎng)絡(luò)地址和2個(gè)字節(jié)的主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“10”,

地址范圍128.1.0.1-191.255.255.254

二進(jìn)制表示為:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110

可用的B類網(wǎng)絡(luò)有16384個(gè),每個(gè)網(wǎng)絡(luò)能容納65534主機(jī)

C類IP地址

一個(gè)C類IP地址由3字節(jié)的網(wǎng)絡(luò)地址和1字節(jié)的主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“110”

范圍192.0.1.1-223.255.255.254

二進(jìn)制表示為: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110

C類網(wǎng)絡(luò)可達(dá)2097152個(gè),每個(gè)網(wǎng)絡(luò)能容納254個(gè)主機(jī)

D類地址用于多點(diǎn)廣播

D類IP地址第一個(gè)字節(jié)以“1110”開(kāi)始,它是一個(gè)專門保留的地址。

它并不指向特定的網(wǎng)絡(luò),目前這一類地址被用在多點(diǎn)廣播(Multicast)中

多點(diǎn)廣播地址用來(lái)一次尋址一組計(jì)算機(jī)

地址范圍224.0.0.1-239.255.255.254

E類IP地址

以“1111”開(kāi)始,為將來(lái)使用保留

E類地址保留,僅作實(shí)驗(yàn)和開(kāi)發(fā)用

私有ip

在這么多網(wǎng)絡(luò)IP中,國(guó)際規(guī)定有一部分IP地址是用于我們的局域網(wǎng)使用,也就

是屬于私網(wǎng)IP,不在公網(wǎng)中使用的,它們的范圍是:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

注意

IP地址127.0.0.1~127.255.255.255用于回路測(cè)試,

如:127.0.0.1可以代表本機(jī)IP地址,用http://127.0.0.1 就可以測(cè)試本機(jī)中配置的Web服務(wù)器。

4. socket簡(jiǎn)介

socket(簡(jiǎn)稱 套接字) 是進(jìn)程間通信的一種方式,它與其他進(jìn)程間通信的一個(gè)主要不同是:

它能實(shí)現(xiàn)不同主機(jī)間的進(jìn)程間通信,我們網(wǎng)絡(luò)上各種各樣的服務(wù)大多都是基于 Socket 來(lái)完成通信的

創(chuàng)建socket

socket.socket(AddressFamily, Type)

說(shuō)明:

函數(shù) socket.socket 創(chuàng)建一個(gè) socket,返回該 socket 的描述符,該函數(shù)帶有兩個(gè)參數(shù):

1 Address Family:可以選擇 AF_INET(用于 Internet 進(jìn)程間通信) 或者 AF_UNIX(用于同一臺(tái)機(jī)器進(jìn)程間通信),實(shí)際工作中常用AF_INET

2 Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協(xié)議)或者 SOCK_DGRAM(數(shù)據(jù)報(bào)套接字,主要用于 UDP 協(xié)議)

import socket

mdpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

創(chuàng)建Socket時(shí),SOCK_DGRAM指定了這個(gè)Socket的類型是UDP

5. udp網(wǎng)絡(luò)程序-發(fā)送數(shù)據(jù)

socket函數(shù)

mySocket = socket(family, type)

函數(shù)socket()的參數(shù)family用于設(shè)置網(wǎng)絡(luò)通信的域,函數(shù)socket()根據(jù)這個(gè)參數(shù)選擇通信協(xié)議的族。通信協(xié)議族在文件sys/socket.h中定義。

函數(shù)socket()的參數(shù)type用于設(shè)置套接字通信的類型,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(數(shù)據(jù)包套接字)等。

并不是所有的協(xié)議族都實(shí)現(xiàn)了這些協(xié)議類型,例如,AF_INET協(xié)議族就沒(méi)有實(shí)現(xiàn)SOCK_SEQPACKET協(xié)議類型。

做一個(gè)簡(jiǎn)單的服務(wù)端,綁定一個(gè)端口

import socket

udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

bindAdress =('',10086)

udpSocket.bind(bindAdress)#綁定一個(gè)端口

while True:

recvDate,recvAddr = udpSocket.recvfrom(1024)#如果沒(méi)有收到發(fā)往這個(gè)綁定端口的消息,會(huì)一直阻塞在這里

recvMsg = '【Receive from %s : %s】:%s'%(recvAddr[0],recvAddr[1],recvDate.decode('gbk'))

print(recvMsg)

發(fā)消息的客戶端

import socket

mySocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

sendAddr=('192.168.11.67',10086)

msg = input('>>')

msg = msg.encode('gbk')

mySocket.sendto(msg,sendAddr)

mySocket.close()

發(fā)送123到10086端口

G:\tools\python3.5\python.exe E:/workspace/day26/01_socket.py

>>123

服務(wù)端收到消息

G:\tools\python3.5\python.exe E:/workspace/day26/08_服務(wù)端綁定端口.py

【Receive from 192.168.11.67 : 54658】:123

6. udp網(wǎng)絡(luò)通信過(guò)程

Paste_Image.png

7. 總結(jié)

udp是TCP/IP協(xié)議族中的一種協(xié)議能夠完成不同機(jī)器上的程序間的數(shù)據(jù)通信

udp服務(wù)器、客戶端

udp的服務(wù)器和客戶端的區(qū)分:往往是通過(guò)請(qǐng)求服務(wù)和提供服務(wù)來(lái)進(jìn)行區(qū)分

1.請(qǐng)求服務(wù)的一方稱為:客戶端

2.提供服務(wù)的一方稱為:服務(wù)器

udp綁定問(wèn)題

一般情況下,服務(wù)器端,需要綁定端口,目的是為了讓其他的客戶端能夠正確發(fā)送到此進(jìn)程

客戶端,一般不需要綁定,而是讓操作系統(tǒng)隨機(jī)分配,這樣就不會(huì)因?yàn)樾枰壎ǖ亩丝诒徽加枚鴮?dǎo)致程序無(wú)法運(yùn)行的情況

總結(jié)

以上是生活随笔為你收集整理的python udp编程_Python UDP编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。