Python多播不能在两台不同的计算机之间工作

2024-03-29 00:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用python脚本通过多播通信的服务器和客户机。当我把我的脚本放在同一台计算机上时,它们的行为是适当的;即它们可以在彼此之间发送和接收数据。计算机正在运行Windows 10。在

当我把一个脚本放在计算机上,一个脚本放在raspberry pi上时,我的计算机除了自己发送的消息外,不会接收任何多播。树莓派接收一切。在

有人能告诉我为什么我的电脑没有收到来自树莓派的数据吗?我可能需要在我的计算机上启用某个设置,或者我需要在脚本中配置某个设置?在

我使用的代码如下:

import socket
import struct

MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007

def _send_socket(message):
    # Create socket to send validation on shooting
    send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    dev = "eth0" + "\0"
    #sock2.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, dev)
    send_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
    send_socket.sendto(message, (MCAST_GRP, MCAST_PORT))
    send_socket.close()

def _recv_socket(recieve_socket):
    data = recieve_socket.recv(10240)
    return data

def run():
    recieve_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    recieve_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    recieve_socket.bind(('', MCAST_PORT))
    mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
    recieve_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

    while(True):

        data= _recv_socket(recieve_socket)
        if data:
            _send_socket("Sending something back")

Tags: ip脚本senddataportdef计算机socket