python組播通訊

2021-10-01 01:45:11 字數 1762 閱讀 4395

傳送端

import time

import socket

# 組播組ip和埠

mcast_group_ip = '234.2.2.2'

mcast_group_port = 23456

def sender():

# 建立傳送socket,和正常udp資料報沒區別

send_sock = socket.socket(socket.af_inet, socket.sock_dgram, socket.ipproto_udp)

# 每十秒傳送一遍訊息

while true:

message = "this message send via mcast !"

# 傳送寫法和正常udp資料報的還是完全沒區別

# 猜測只可能是網絡卡自己在識別到目的ip是組播位址後,自動將目的mac位址設為多播mac位址

send_sock.sendto(message.encode(), (mcast_group_ip, mcast_group_port))

print(f': message send finish')

time.sleep(2)

if __name__ == "__main__":

sender()

接收端

import struct

import time

import socket

# 組播組ip和埠

mcast_group_ip = '234.2.2.2'

mcast_group_port = 23456

def receiver():

# 建立接收socket,和正常udp資料報沒區別

sock = socket.socket(socket.af_inet, socket.sock_dgram, socket.ipproto_udp)

# 獲取本地ip位址

local_ip = socket.gethostbyname(socket.gethostname())

# 監聽埠,已測試過其實可以直接bind 0.0.0.0;但注意不要bind 127.0.0.1不然其他機器發的組播包就收不到了

sock.bind((local_ip, mcast_group_port))

# 加入組播組

mreq = struct.pack("=4sl", socket.inet_aton(mcast_group_ip), socket.inaddr_any)

sock.setsockopt(socket.ipproto_ip,socket.ip_add_membership,mreq)

# 允許埠復用,看到很多教程都有沒想清楚意義是什麼,我這裡直接注釋掉

# sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

# 設定非阻塞,看到很多教程都有也沒想清楚有什麼用,我這裡直接注釋掉

# sock.setblocking(0)

while true:

try:

message, addr = sock.recvfrom(1024)

print(f': receive data from : ')

except :

print("while receive message error occur")

if __name__ == "__main__":

receiver()

Zigbee協議棧組播通訊

在zigbee網路中組播通訊,模組可以分組來標記,傳送模組的組號和接受模組的組號相對應,那麼這些模組就可以拿到無線資料報。分組中組編號是2個位元組,如0x0001 0x0002。傳送的模組按照組的方式傳送,需要目標模組的組編號,端點,簇。乙個組可以關聯多個端點,同乙個端點也可以關聯多個組。終端節點 ...

udp組播通訊實現 c

前幾天需要做乙個和第三方平台配套的單向通訊,反向隔離的通訊介面,原本確定是採用udp組播方式實現,通訊裝置中間加正向網路隔離裝置防止反通訊。我想著趕緊先行測試驗證一下,哪知我好不容易花了乙個下午編譯測試後,對接的廠家卻反饋說不再使用udp通訊,他們要用http方式,並不考慮兩個系統通訊隔離問題。我只...

zigbee學習筆記十二 組播通訊

1 協調器建立網路,並加入乙個組,向組內成員組播資料 i am coordinator device n 2 終端1加入網路,並加入與協調器相同的組,收到協調器傳送而來的資料 2 終端2加入網路,並加入另外乙個組,不能收到協調器發來的資料 1 複製工程模板,並重命名 2 加入串列埠通訊 3 配置組播...