国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python使用socket實現組播與發送二進制數據

Python使用socket實現組播與發送二進制數據

2021-12-02 11:45一天一篇Python庫 Python

在工作中經常會用到socket傳輸數據,例如客戶端給服務器發送數據(雙方約定了數據格式),本文主要介紹了Python使用socket實現組播與發送二進制數據,感興趣的可以了解一下

什么是組播

點對點連接可以處理很多通信需求,不過隨著直接連接數的增加,在多對通信方之間傳遞相同的消息會變得越來越困難。

單獨地向各個接收方發送消息會耗費額外的處理時間和帶寬,這對于諸如完成流視頻或音頻操作的應用來說,代碼會出現顯著的性能問題。

而使用組播(multicast)向多個端點同時發送消息可以得到更好的效率,因為網絡基礎設施可以確保數據包會被傳送到所有接收方。

組播消息總是使用UDP發送,因為TCP需要提供一對通信系統。組播的地址被稱為組播組,這是常規的IPv4地址范圍的一個子集(224.0.0.0~230.255.255.255),專門為主播通信預留。

這些地址會由網絡路由器和交換機進行特殊的處理,所以發送到組的消息可以在互聯網上被分發到加入這個組的所有接收方。

需要注意的是,大多數托管的路由器與交換機默認會禁止組播通信。如果后續運行程序有問題,那么可以檢查你的網絡設置。

發送組播消息

由于無法知道會收到多少響應,所以需要對套接字使用一個超時值,以避免等待回答時無限阻塞。

TTL(Time-To-Live value)是一個生存時間值,會控制多少網絡接收這個數據包。要使用IP_MULTICAST_TTL選項與setsockopt()函數來設置TTL。默認值1表示路由器不會把數據包轉發到當前網段之外。TTL最大取值255,應包包裝為1個字節。

示例代碼如下:

import socket
import struct

# 1.創建一個套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

multicast_group = ("224.3.29.71", 10000)
sock.settimeout(10)

ttl = struct.pack("b", 1)#本博主數據結構與算法第10篇對struct二進制結構體進行介紹
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)

try:
    msg = "群發的消息,你不必回".encode("UTF-8")
    sent = sock.sendto(msg, multicast_group)
    while True:
        try:
            data, server = sock.recvfrom(1024)
        except socket.timeout:
            print("time out")
            break
        else:
            print(data, server)
finally:
    sock.close()

這里的代碼與UDP類似,除了sock.setsockopt()的調用。

接收組播消息

建立組播接收者的第一步是創建UDP套接字。創建常規的套接字并綁定到一個端口后,可以使用setsockopt()改變IP_ADD_MEMBERSHIP選項,增加安東組播組。

這個選項值是組播地址的一個8字節的打包表示,后面是服務器監聽通信流的網絡接口,由其IP地址標識。這里,接收者使用INADDR_ANY監聽所有接口。

示例代碼如下:

import socket
import struct

multicast_group = "224.3.29.71"
server_address = ("", 10000)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(server_address)

group = socket.inet_aton(multicast_group)
mreq = struct.pack("4sL", group, socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
    data, address = sock.recvfrom(1024)
    print(data.decode("UTF-8"), address)
    sock.sendto("組播消息已經收到".encode("UTF-8"), address)

接收者的循環與UDP服務器類似。

運行之后,效果如下:

Python使用socket實現組播與發送二進制數據

Python使用socket實現組播與發送二進制數據

到此這篇關于Python使用socket實現組播與發送二進制數據的文章就介紹到這了,更多相關Python 組播與發送二進制數據內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://liyuanjinglyj.blog.csdn.net/article/details/117414372

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜精品久久 | 午夜精品久久久久久久久久久久 | 欧美国产日韩在线 | 午夜精品久久久久久久男人的天堂 | 刘亦菲的毛片 | 国产激情网址 | 国产精品久久久久久亚洲调教 | 国产一区二区影院 | 欧美中文在线 | 日韩在线精品 | 欧美一区永久视频免费观看 | 成人免费在线播放 | 日韩精品在线观看中文字幕 | 中文字幕第一页在线 | 亚洲国产精品99久久久久久久久 | 久9re热视频这里只有精品 | 做a视频免费观看 | 国产成人精品一区二区三区视频 | 精彩毛片 | 亚洲一区二区三区免费观看 | 欧美喷水 | 国产片免费 | 日韩在线看片 | 中文字幕日产乱码六区小草 | 欧美一区二区三区在线观看视频 | 最近日韩中文字幕 | 嫩呦国产一区二区三区av | 日韩在线网址 | 日韩不卡在线 | 日韩视频在线免费观看 | 欧美日本韩国一区二区三区 | 成人免费在线视频播放 | 青青草国产精品 | 国产精品久久久久一区二区三区 | 91久久精品国产91久久性色tv | 国精品一区二区三区 | 久久综合久久综合久久 | 一区影院 | 精品一区二区三区四区 | 毛片在线一区二区观看精品 | 香蕉av777xxx色综合一区 |