zoukankan      html  css  js  c++  java
  • 加入upnp多播组(239.255.255.250:1900)

    golang的udp组播, 如果你家里有路由器,可以试一下。

    package main
    
    import (
        "bufio"
        "bytes"
        "log"
        "net"
        "net/http"
        "regexp"
    )
    
    func handler(r *http.Request) {
        log.Printf("Got %s %s message from %v: %v", r.Method, r.URL.Path, r.RemoteAddr, r.Header)
    }
    
    var (
        trailingWhitespaceRx = regexp.MustCompile(" +
    ")
        crlf                 = []byte("
    ")
    )
    
    // 加入upnp多播组: 239.255.255.250:1900
    func main() {
        var addr *net.UDPAddr
        var err error
    
        if addr, err = net.ResolveUDPAddr("udp", "239.255.255.250:1900"); err != nil {
            log.Fatal(err)
        }
    
        var conn net.PacketConn
    
        // net.Interface is nil, call net.joinIPv4Group
        if conn, err = net.ListenMulticastUDP("udp", nil, addr); err != nil {
            log.Fatal(err)
        }
    
        log.Println("begin to receive: ")
        buf := make([]byte, 2048)
    
        for {
            n, peerAddr, err := conn.ReadFrom(buf[0:])
            log.Println("n=", n)
            if err != nil {
                log.Fatal(err)
                break
            }
    
            reqbytes := buf[:n]
            reqbytes = trailingWhitespaceRx.ReplaceAllLiteral(reqbytes, crlf)
    
            req, err := http.ReadRequest(bufio.NewReader(bytes.NewBuffer(reqbytes)))
            if err != nil {
                log.Printf("Failed to parse request: %v", err)
                return
            }
            req.RemoteAddr = peerAddr.String()
            handler(req)
        }
    }
  • 相关阅读:
    学习之路
    cordova配置icon和splash
    cardova-android打包
    数组元素最大差值的问题
    病毒攻击
    STL模板中List
    Direct3D API函数
    Direct3D雾化效果浅析
    Direct3D中顶点声明格式
    DirectX9.0 Direct3D Graphics Pipeline 总结
  • 原文地址:https://www.cnblogs.com/bear129/p/11956475.html
Copyright © 2011-2022 走看看