傳送端
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 配置組播...