用Python发送广播

2023-12-11

我正在尝试学习编写套接字(在Python 3中),我只是尝试从服务器发送广播并从客户端接收它。

我的问题是,每当我尝试将数据包发送到 255.255.255.255 时,似乎实际上没有发送任何内容。 我尝试使用wireshark查找数据包,但除了环回接口外,我找不到任何数据包。

手动输入IP就可以在两台电脑之间成功发送消息,并且在wireshark中也看到了数据包。

这是客户端的代码

import socket


sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.bind(("0.0.0.0", 5005))
while True:
    # sock.sendto(bytes("hello", "utf-8"), ip_co)
    data, addr = sock.recvfrom(1024)
    print(data)

这是服务器的代码

import socket
from time import sleep

def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)  # UDP
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    #  sock.settimeout(2)
    while True:

        sock.sendto(bytes("test", "utf-8"), ("255.255.255.255", 5005))

        sleep(1)


main()

抱歉,如果代码很难看,我对套接字和 python 非常陌生。


原因是您在一个界面上广播并在另一个界面上收听。看这个答案所有接口上的 UDP 广播.

您需要在所有接口上进行广播,例如使用以下(纯粹用于演示)代码。但是,请记住,IP 广播是一项遗留功能,已从 IPv6 中删除。请改用多播。

import socket
from time import sleep

def main():
    interfaces = socket.getaddrinfo(host=socket.gethostname(), port=None, family=socket.AF_INET)
    allips = [ip[-1][0] for ip in interfaces]

    msg = b'hello world'
    while True:

        for ip in allips:
            print(f'sending on {ip}')
            sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)  # UDP
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
            sock.bind((ip,0))
            sock.sendto(msg, ("255.255.255.255", 5005))
            sock.close()

        sleep(2)


main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Python发送广播 的相关文章

随机推荐

  • C++ 后台定时器

    include stdafx h include
  • 如果关系不存在则返回节点

    我正在尝试使用 cypher 创建一个查询 它将 查找 厨师可能拥有的缺失成分 我的图表设置如下 ingredient value is part of gt ingredient ingredient 将有一个名称 染料颜色 的键 值 i
  • Symfony2 登录和安全

    有没有办法可以存储用户上次登录的时间 我正在使用 symfony2 安全配置一切正常 我见过这个基于 Symfony 2 的项目的安全性和登录 这是一个类似的问题 但它不符合我的需要 还有其他解决办法吗 您可以创建一个Authenticat
  • C# HttpClient 和 API

    我有一个 Web 应用程序 它使用 HttpClient 类从 API 中提取数据 我有几个问题 HttpClient 是从 API 获取数据的最佳选择吗 我从 APi 获取一个字符串并将其反序列化为一个对象 每次使用时都会创建 HttpC
  • Python 中如何确定范围[重复]

    这个问题在这里已经有答案了 为什么第二个函数中的第一个 print 语句会抛出错误x没有定义 x 5 def function a print x def function b print x x 7 print x 运行第一个函数会得到以
  • ubuntu 16.04 nginx 更改 phpmyadmin url 不起作用

    Ubuntu 16 04 5 LTS Xenial 4 18 8 x86 64 linode117 nginx version nginx 1 10 3 Ubuntu php v7 0 32 0ubuntu0 16 04 1 etc ngi
  • matplotlib 在 IPython 中不使用 matplotlibrc 文件

    我最近从 matplotlib v1 5 3 从 v2 0 0 升级 但通过此更改 matplotlib 在绘制图形时似乎不再使用我编辑的 matplotlibrc 文件 当我打开 matplotlibrc 文件时 我看到我的更改实际上已实
  • Shiny - 使用 for 循环插入 UI 在每个输出中返回相同的元素

    我想在我的 Shiny 应用程序中插入非预定义数量的图表 我使用了一个for循环和一系列的insertUI 问题是当我运行它时 文本元素的行为符合预期 但图形都呈现相同的图像 我怎样才能防止这种情况发生 这是一个代表 library shi
  • 复制 TreeView 节点

    我正在尝试将选定的树视图节点复制到剪贴板 以便可以将其粘贴到记事本中 这是我的代码 但它不起作用 TreeNode selNode TreeNode this treeView1 SelectedNode Clipboard SetData
  • 尝试使用正则表达式删除Python中的字符EM DASH“—”(—)

    我得到了这个顽固的 EM DASH 字符 我试图使用正则表达式删除它 但由于某种原因我无法让它工作 这是我正在使用的代码 editedSource re sub r u2014 str source 我在这里做错了什么 我很确定我得到了正确
  • 如何表达复数的四分函数

    确实存在所谓的超操作序列 它的工作原理就像你构建乘法一样a b a a a a a并添加了许多a重复b次 然后是求幂a b a a a a a与许多乘法a重复b次 然后 就出现了四联 表示为指数塔 就像a b a a a a 重复b tim
  • 将具有 Alpha 通道的图像复制到具有自定义背景颜色的剪贴板?

    Code private void Foo Canvas canvas The content is a bit larger Size size new Size canvas ActualWidth 1 1 canvas ActualH
  • x86汇编linux中如何解释系统调用

    我对为什么 如何在 Linux 环境中的 x86 程序集中打印一个值感到困惑 例如 如果我想打印一个值 我会这样做 mov eax 4 mov ebx 1 mov ecx msg mov edx msgLength int 80h 现在我明
  • AKS 创建的服务主体密码过期

    我使用 创建 Kubernetes 集群 功能在 Azure 门户中创建了 AKS 集群 并允许其创建新的服务主体 我开始怀疑该委托人使用的凭证是否过期 为了避免 K8s 在凭证过期时与 Azure 通信出现问题 我开始查看已创建的帐户 如
  • jQuery Mobile 在一个对话框中显示多个对话框

    我已经搜索过 但没有找到这样做的例子 我希望能够为 jQM 打开一个对话框 并在一个对话框内进行逐步过程 我认为这需要将多个对话框加载到一个对话框中 并且不知道这是否可行 我们将 Backbone 与 jQM 结合使用 并希望能够在对话框中
  • 维持 mgo 会话的最佳实践

    我目前正在使用带有 mgo lib 的 mongodb 作为 Web 应用程序 但我不确定我使用它的方式是否良好 package db import gopkg in mgo v2 const MongoServerAddr 192 168
  • pymongo 按日期时间分组

    我试图按日期字段 日期时间 搜索集合和分组记录 我知道 pymongo 将它们转换为背景上的正确类型 ISODate 或类似的东西 问题是 由于日期时间对象具有日期 时间 时区 我如何告诉组运算符仅使用日期部分 因为否则我不会得到所需的分组
  • ASP.NET AJAX 返回 JSON 但未识别为 JSON

    我有这个功能可以让我返回经理列表 function getManagers var jqxhr ajax type POST contentType application json charset utf 8 url webservice
  • 第一个 postLink() 不创建表单

    使用已经存在的代码烘焙成 CRUD 我有以下代码删除一个项目 问题是它说谎了包裹在 FORM 标签中 所以最终发生的是Cake 不包含 postLink 将提交的表单 是否有另一种方法即使在我增加安全设置时仍然可以保持 Cake 基础设施的
  • 用Python发送广播

    我正在尝试学习编写套接字 在Python 3中 我只是尝试从服务器发送广播并从客户端接收它 我的问题是 每当我尝试将数据包发送到 255 255 255 255 时 似乎实际上没有发送任何内容 我尝试使用wireshark查找数据包 但除了