TCP/IP
UDP 广播
这次感触最多的就是针对一个通用协议,做到物尽其用......顿时对 Spotify 有了好感!
局域网 IP 159 发 UDP 广播,当前电脑 IP 151,收到流量包数据,并回复一个数据包!
udpserver.go
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 9001})
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Local: <%s> \n", listener.LocalAddr().String())
data := make([]byte, 1024)
for {
n, remoteAddr, err := listener.ReadFromUDP(data)
if err != nil {
fmt.Printf("error during read: %s", err)
}
fmt.Printf("<%s> %s\n", remoteAddr, data[:n])
_, err = listener.WriteToUDP([]byte("world"), remoteAddr)
if err != nil {
fmt.Printf(err.Error())
}
}
}
udpclient.go
package main
import (
"fmt"
"net"
"os"
)
func main() {
ip := net.ParseIP("192.168.199.255")
srcAddr := &net.UDPAddr{IP: net.IPv4zero, Port: 0}
dstAddr := &net.UDPAddr{IP: ip, Port: 9001}
conn, err := net.ListenUDP("udp", srcAddr)
if err != nil {
fmt.Println(err)
}
n, err := conn.WriteToUDP([]byte("hello"), dstAddr)
if err != nil {
fmt.Println(err)
}
data := make([]byte, 1024)
n, _, err = conn.ReadFrom(data)
if err != nil {
fmt.Println(err)
}
fmt.Printf("read %s from <%s>\n", data[:n], conn.RemoteAddr())
b := make([]byte, 1)
os.Stdin.Read(b)
}
1
killsting 2017-06-20 10:23:44 +08:00
Spotify 确实做得很好在同步方面。
|
2
TimePPT 2017-06-20 10:35:56 +08:00 via iPhone
Spotify 最让我爽的是不通过局域网一样能串流操作
|
5
moguiyu 2017-06-20 10:48:22 +08:00 via iPhone
好棒! spotify 这点很赞
|
6
Wichna 2017-06-20 18:03:50 +08:00
musixmatch 同步 spotify 的播放进度也是这个原理么?
|