Golang不能发送udp广播

大地缸 · · 1255 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


title: "Golang不能发送udp广播"
date: 2021-01-29T20:55:16+08:00
draft: true
tags: ['go','udp']
author: "dadigang"
author_cn: "大地缸"
personal: "http://www.real007.cn"


关于作者

http://www.real007.cn/about

go 不能发送udp广播,这算不算是一个bug?

net.Dial(“udp”, “255.255.255.255:8888”)

win下和centos下都测试了,局域网广播始终没有任何数据返回

附代码

package main

import (
    "fmt"
    "net"
    "time"
)

func main() {
    go func() {
        server, _ := net.ListenPacket("udp", ":8888")
        fmt.Println("server ip:", server.LocalAddr().String(), "  ", server.LocalAddr().Network())
        _buff := make([]byte, 8192)
        for {
            _count, _addr, _ := server.ReadFrom(_buff)
            fmt.Println("upd ip:", _addr.String(), "  ", _addr.Network())
            fmt.Println("package length:", _count)
            fmt.Println("content:", string(_buff[0:_count]))
            _wc, _err_w := server.WriteTo([]byte("ok"), _addr)
            if _err_w != nil {
                panic(_err_w)
            } else {
                fmt.Println("write count:", _wc)
            }
        }
    }()

    time.Sleep(time.Second * 2)

    //_radd, _ := net.ResolveUDPAddr("udp", "127.0.0.1:8888")  更换为这个是单播,结果是正常的
    _radd, _ := net.ResolveUDPAddr("udp", "255.255.255.255:8888")
    _udp, _err_udp := net.DialUDP("udp", nil, _radd)
    if _err_udp != nil {
        panic(_err_udp)
    } else {
        _udp.SetDeadline(time.Now().Add(time.Second * 3))
        _, _err_write := _udp.Write([]byte("test"))
        if _err_write != nil {
            panic(_err_write)
        }
        _buff := make([]byte, 8192)
        _count, _err_read := _udp.Read(_buff)
        if _err_read != nil {
            panic(_err_read)
        }
        fmt.Println("read result:", string(_buff[:_count]))
    }
}

solved


iptables.clear


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:大地缸

查看原文:Golang不能发送udp广播

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1255 次点击  
加入收藏 微博
1 回复  |  直到 2021-02-01 17:18:07
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传