国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python網(wǎng)絡(luò)編程之UDP協(xié)議

這篇具有很好參考價值的文章主要介紹了Python網(wǎng)絡(luò)編程之UDP協(xié)議。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Hello,大家好。本期來和大家一起學(xué)習(xí)一下網(wǎng)絡(luò)編程UDP的相關(guān)知識。

基礎(chǔ)知識補(bǔ)充

ip

ip地址:用來在網(wǎng)絡(luò)中標(biāo)記一臺電腦,在本地局域網(wǎng)上是唯一的。

查看電腦ip地址:ipconfig(win)/ifconfig(linux/mac)

端口

端口:設(shè)備與外界通訊交流的出口

一共有65536個(0 - 65535) 端口

知名端口是眾所周知的端口號。范圍從0到1023

例如:443:HTTPS 80:HTTP ...

動態(tài)端口一般不固定分配某種服務(wù),而是動態(tài)分配。范圍是從1024到65535

TCP/IP協(xié)議

TCP/IP協(xié)議是一個協(xié)議簇。里面包括了很多協(xié)議,之所以命名為TCP/IP協(xié)議,是因?yàn)門CP、IP協(xié)議是兩個很重要的協(xié)議。

python網(wǎng)絡(luò)編程用的兩種協(xié)議:TCP、UDP通過這兩種協(xié)議將字節(jié)碼進(jìn)行網(wǎng)絡(luò)傳輸?shù)摹?/p>

Python編碼轉(zhuǎn)換

str->bytes:encode(編碼)

bytes->str:decode(解碼)

使用方式:

bytes.decode(encoding="utf-8", errors="strict")
str.encode(encoding="utf-8", errors="strict")

errors:錯誤的處理方案。

encoding:解碼編碼過程中使用的編碼(此處指“編碼方案”是名詞)

示例:

text = '我是文本'

bytesText = text.encode(encoding="utf-8", errors="strict")
print(bytesText)  # b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
strText = bytesText.decode(encoding="utf-8", errors="strict")
print(strText)  # 我是文本

socket套接字

不同電腦上的進(jìn)程之間如何通信?

1臺電腦上是通過進(jìn)程號(PID)來唯一標(biāo)識一個進(jìn)程,但是在網(wǎng)絡(luò)中這是行不通的。

其實(shí)TCP/IP協(xié)議已經(jīng)幫我們解決了這個問題。

網(wǎng)絡(luò)層的“ip地址”可以唯一標(biāo)識網(wǎng)絡(luò)中的主機(jī),而傳輸層的“協(xié)議+端口”可以唯一標(biāo)識主機(jī)中的應(yīng)用進(jìn)程。

這樣利用ip地址+協(xié)議+端口就可以標(biāo)識網(wǎng)絡(luò)的進(jìn)程了,網(wǎng)絡(luò)中的進(jìn)程通信就可以利用這個標(biāo)志與其它進(jìn)程進(jìn)行交互。

什么是socket?

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

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

例如我們每天瀏覽的網(wǎng)頁、QQ 聊天、收發(fā) email 等等。

python udp,python,網(wǎng)絡(luò),udp,python,Powered by 金山文檔

創(chuàng)建socket

套接字使用流程:

  • 創(chuàng)建套接字

  • 使用套接字收/發(fā)數(shù)據(jù)

  • 關(guān)閉套接字

import socket
socket_ = socket.socket(AddressFamily, Type)
# AddressFamily: socket.AF_INET(用于Internet進(jìn)程之間通信)、socket.AF_UNIX(用于同一臺機(jī)器進(jìn)程間通信)
# Type:socket.SOCK_STREAM(tcp)、socket.SOCK_DGRAM(udp)

創(chuàng)建一個tcp socket(tcp套接字)

import socket

# 創(chuàng)建tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ...這里是使用套接字的功能(省略)...

# 不用的時候,關(guān)閉套接字
s.close()

創(chuàng)建一個udp socket(udp套接字)

import socket

# 創(chuàng)建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# ...這里是使用套接字的功能(省略)...
 
# 不用的時候,關(guān)閉套接字
s.close()

UDP協(xié)議

概念

UDP是一種無連接的傳輸層協(xié)議,不提供可靠性,傳輸量小,傳輸速度較快。

python udp,python,網(wǎng)絡(luò),udp,python,Powered by 金山文檔

創(chuàng)建UDP客戶端

步驟:

  1. 創(chuàng)建客戶端套接字

  1. 發(fā)送/接收數(shù)據(jù)

  1. 關(guān)閉套接字

python代碼:

import socket


def main():
    #  1.創(chuàng)建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可選(接收時的端口 ('',端口))
    local_address = ('', 8080)
    udp_socket.bind(local_address)

    while True:
        # 2.發(fā)送數(shù)據(jù)到指定的電腦
        send_data = input('請輸入你要發(fā)送的數(shù)據(jù):')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.5.132', 6666))
        if send_data == 'exit':
            break

        # 可選(接收對方發(fā)送的數(shù)據(jù))
        recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字節(jié)數(shù)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('當(dāng)前客戶端地址:{},當(dāng)前接受的信息是:{}'.format(recv_address, recv_msg))

    # 3.關(guān)閉套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

創(chuàng)建UDP服務(wù)端

  1. 創(chuàng)建客戶端套接字

  1. 綁定ip和端口

  1. 接收/發(fā)送數(shù)據(jù)

  1. 關(guān)閉套接字python代碼:

import socket


def main():
    #  1.創(chuàng)建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.必須選擇接收時的ip和端口 (ip,端口)
    local_address = ('192.168.5.132', 6666)
    udp_socket.bind(local_address)

    while True:
        # 3.接收對方發(fā)送的數(shù)據(jù)
        recv_data = udp_socket.recvfrom(1024)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('當(dāng)前客戶端地址:{},當(dāng)前接受的信息是:{}'.format(recv_address, recv_msg))

        # 可選(發(fā)送數(shù)據(jù)到指定的電腦)
        send_data = input('請輸入你要發(fā)送的數(shù)據(jù):')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 8080))
        if send_data == 'exit':
            break
    # 4.關(guān)閉套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

實(shí)戰(zhàn)案例:

如果是兩臺電腦的話:

客戶端(192.168.2.4):

import socket


def main():
    #  1.創(chuàng)建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可選(接收時的端口 ('',端口))
    local_address = ('', 8080)
    udp_socket.bind(local_address)

    while True:
        # 2.發(fā)送數(shù)據(jù)到指定的電腦
        send_data = input('請輸入你要發(fā)送的數(shù)據(jù):')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.5.132', 6666))
        if send_data == 'exit':
            break

        # 可選(接收對方發(fā)送的數(shù)據(jù))
        recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字節(jié)數(shù)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('當(dāng)前客戶端地址:{},當(dāng)前接受的信息是:{}'.format(recv_address, recv_msg))

    # 3.關(guān)閉套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

服務(wù)端(192.168.5.132):

import socket


def main():
    #  1.創(chuàng)建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.必須選擇接收時的ip和端口 (ip,端口)
    local_address = ('192.168.5.132', 6666)
    udp_socket.bind(local_address)

    while True:
        # 3.接收對方發(fā)送的數(shù)據(jù)
        recv_data = udp_socket.recvfrom(1024)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('當(dāng)前客戶端地址:{},當(dāng)前接受的信息是:{}'.format(recv_address, recv_msg))

        # 可選(發(fā)送數(shù)據(jù)到指定的電腦)
        send_data = input('請輸入你要發(fā)送的數(shù)據(jù):')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 8080))
        if send_data == 'exit':
            break
    # 4.關(guān)閉套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

效果演示:

python udp,python,網(wǎng)絡(luò),udp,python,Powered by 金山文檔

客戶端(192.168.2.4)

python udp,python,網(wǎng)絡(luò),udp,python,Powered by 金山文檔

服務(wù)端(192.168.5.132)

如果是單臺電腦的話:

客戶端(192.168.2.4):

import socket


def main():
    #  1.創(chuàng)建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可選(接收時的端口 ('',端口))
    local_address = ('', 8080)
    udp_socket.bind(local_address)

    while True:
        # 2.發(fā)送數(shù)據(jù)到指定的電腦
        send_data = input('請輸入你要發(fā)送的數(shù)據(jù):')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 6666))
        if send_data == 'exit':
            break

        # 可選(接收對方發(fā)送的數(shù)據(jù))
        # recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字節(jié)數(shù)
        # recv_msg = recv_data[0].decode('utf-8')
        # recv_address = recv_data[1]
        # print('當(dāng)前客戶端地址:{},當(dāng)前接受的信息是:{}'.format(recv_address, recv_msg))

    # 3.關(guān)閉套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

服務(wù)端(192.168.2.4):

import socket


def main():
    #  1.創(chuàng)建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.必須選擇接收時的ip和端口 (ip,端口)
    local_address = ('192.168.2.4', 6666)
    udp_socket.bind(local_address)

    while True:
        # 3.接收對方發(fā)送的數(shù)據(jù)
        recv_data = udp_socket.recvfrom(1024)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('當(dāng)前客戶端地址:{},當(dāng)前接受的信息是:{}'.format(recv_address, recv_msg))

        # 可選(發(fā)送數(shù)據(jù)到指定的電腦)
        # send_data = input('請輸入你要發(fā)送的數(shù)據(jù):')
        # udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 8080))
        # if send_data == 'exit':
        #     break
    # 4.關(guān)閉套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

效果演示:

python udp,python,網(wǎng)絡(luò),udp,python,Powered by 金山文檔

客戶端(192.168.2.4)

python udp,python,網(wǎng)絡(luò),udp,python,Powered by 金山文檔

服務(wù)端(192.168.2.4)

下篇文章我們來一起探討一下TCP。

(劇透:下篇文章更精彩好玩哦?。?/span>文章來源地址http://www.zghlxwxcb.cn/news/detail-776608.html

到了這里,關(guān)于Python網(wǎng)絡(luò)編程之UDP協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包