发送数据包 无法收到的问题

发送是正常的 数据包也发出了 wireshark也有多台摄像头接收到消息 并发送给我 但是脚本收不到消息 我本地防火墙是关的 接收消息时 也确定在监听

发送数据包 无法收到的问题

Python

import socket

# 创建UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# ONVIF探测消息
onvif_probe = (
    "M-SEARCH * HTTP/1.1\r\n" +
    "HOST: 239.255.255.250:3702\r\n" +
    "MAN: \"ssdp:discover\"\r\n" +
    "MX: 3\r\n" +
    "ST: urn:schemas-upnp-org:device:NetworkVideoTransmitter:1\r\n\r\n"
).encode('utf-8')

# 发送探测消息
sock.sendto(onvif_probe, ('239.255.255.250', 3702))

# 关闭Socket
sock.close()
import socket

# 创建UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定到特定的IP和端口以接收消息
sock.bind(('192.168.2.213', 3702))

try:
    while True:
        # 接收消息
        data, addr = sock.recvfrom(10240)  # 接收最多10240字节的数据
        print("Received message from {}: {}".format(addr, data.decode('utf-8')))
except socket.timeout:
    print("Socket timeout")
except KeyboardInterrupt:
    print("Socket closed by user")

# 关闭Socket
sock.close()
chowjiawei
讨论数量: 4

从您的描述和代码中,我注意到您的脚本中存在一些潜在的问题,这可能是导致您无法接收到数据包的原因:

Socket绑定和关闭问题:您的脚本中有两个独立的socket实例。第一个实例用于发送数据,然后立即关闭。第二个实例用于接收数据,但它绑定在特定的IP地址和端口上。这可能导致数据无法正确接收。通常,发送和接收应该在同一个持续开启的socket上进行。

多播地址问题:您发送数据到一个多播地址(239.255.255.250)。确保您的网络支持多播,并且您的socket配置正确以接收多播数据。

防火墙或网络配置:虽然您提到本地防火墙已关闭,但可能还有其他网络因素影响数据传输。请检查网络配置或与网络管理员联系,以确保数据包没有在网络中被阻止。

为解决这些问题,您可以尝试以下步骤:

使用同一个socket实例来发送和接收数据。 检查您的网络配置,确保它支持多播,并且没有其他设备(如路由器或交换机)阻止多播数据。 如果可能,尝试在不同的网络环境中测试您的脚本,以排除网络相关问题。

1年前 评论
chowjiawei (楼主) 1年前
chowjiawei (楼主) 1年前
难受 (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!