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)
        }
    }
  • 相关阅读:
    全屏漂浮
    JQ----树杈型导航
    SSM中各层作用及关系
    java23种设计模式 追MM简易理解版
    SQL语句的增练习案例
    pl/sql
    pl/sql练习案例
    oracle查重和oracle分页
    oracle中的常用函数
    IntelliJ Idea 常用快捷键列表
  • 原文地址:https://www.cnblogs.com/bear129/p/11956475.html
Copyright © 2011-2022 走看看