TCP 示例
server ( 监听 - 接收 - 发送 )
package main
import (
"fmt"
"net"
)
func process(conn net.Conn) {
defer conn.Close()
var tmp [1024]byte
n, err := conn.Read(tmp[:])
if err != nil {
fmt.Println("接收数据失败")
return
}
recMsg := string(tmp[:n])
fmt.Println(recMsg)
sendMsg := fmt.Sprintf("server 已经接收到如下消息: %v", recMsg)
_, err = conn.Write([]byte(sendMsg))
if err != nil {
fmt.Println("发送数据失败")
return
}
}
func main() {
l, err := net.Listen("tcp", "127.0.0.1:20000")
if err != nil {
fmt.Printf("连接失败: port: %v\n", 20000)
return
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("建立连接失败, err: ", err)
continue
}
go process(conn)
}
}
client.go ( 建立连接 - 发送 - 接收 )
package main
import (
"fmt"
"net"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:20000")
if err != nil {
fmt.Printf("建立连接失败, port: %v\n", 20000)
return
}
defer conn.Close()
_, err = conn.Write([]byte("我是 client"))
if err != nil {
fmt.Println("发送消息失败")
return
}
var tmp [1024]byte
n, err := conn.Read(tmp[:])
if err != nil {
fmt.Println("接收数据失败")
return
}
fmt.Println(string(tmp[:n]))
}
UDP 示例
server ( 监听 - 接收 - 发送 )
package main
import (
"fmt"
"net"
)
func main() {
l, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 30000,
})
if err != nil {
fmt.Println("建立监听失败")
return
}
defer l.Close()
for {
var tmp [1024]byte
n, addr, err := l.ReadFromUDP(tmp[:])
if err != nil {
fmt.Println("接收消息失败")
return
}
fmt.Printf("addr: %v; msg: %v\n", addr, string(tmp[:n]))
msg := "server 回复 udp 消息"
_, err = l.WriteToUDP([]byte(msg), addr)
if err != nil {
fmt.Println("发送消息失败")
return
}
}
}
client ( 请求 - 发送 - 接收 )
package main
import (
"fmt"
"net"
)
func main() {
conn, err := net.Dial("udp", "127.0.0.1:30000")
if err != nil {
fmt.Println("发起请求失败")
return
}
defer conn.Close()
msg := "client 发送 udp 消息"
_, err = conn.Write([]byte(msg))
if err != nil {
fmt.Println("发送消息失败")
return
}
var tmp [1024]byte
n, err := conn.Read(tmp[:])
if err != nil {
fmt.Println("接收消息失败")
return
}
fmt.Println(string(tmp[:n]))
}