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)
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.