1.UDP服务器
package main
import (
"fmt"
"net"
"time"
)
func main00() {
srvAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8006")
if err != nil {
fmt.Println("ResolveUDPAddr err:", err)
return
}
fmt.Println("udp 服务器地址结构,创建完程!!!")
udpConn, err := net.ListenUDP("udp", srvAddr)
if err != nil {
fmt.Println("ListenUDP err:", err)
return
}
defer udpConn.Close()
fmt.Println("udp 服务器通信socket创建完成!!!")
buf := make([]byte, 4096)
n, cltAddr, err := udpConn.ReadFromUDP(buf)
if err != nil {
fmt.Println("ReadFromUDP err:", err)
return
}
fmt.Printf("服务器读到 %v 的数据:%s\n", cltAddr, string(buf[:n]))
daytime := time.Now().String()
_, err = udpConn.WriteToUDP([]byte(daytime), cltAddr)
if err != nil {
fmt.Println("WriteToUDP err:", err)
return
}
}
2.UDP客户端
package main
import (
"fmt"
"net"
)
func main01() {
conn, err := net.Dial("udp", "127.0.0.1:8006")
if err != nil {
fmt.Println("net.Dial err:", err)
return
}
defer conn.Close()
for i := 0; i < 1000000; i++ {
conn.Write([]byte("Are you Ready?"))
buf := make([]byte, 4096)
n, err := conn.Read(buf)
if err != nil {
fmt.Println("conn.Read err:", err)
return
}
fmt.Println("服务器回发:", string(buf[:n]))
}
}
3.UDP并发服务器
package main
import (
"fmt"
"net"
"time"
)
func main02() {
srvAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8006")
if err != nil {
fmt.Println("ResolveUDPAddr err:", err)
return
}
fmt.Println("udp 服务器地址结构,创建完程!!!")
udpConn, err := net.ListenUDP("udp", srvAddr)
if err != nil {
fmt.Println("ListenUDP err:", err)
return
}
defer udpConn.Close()
fmt.Println("udp 服务器通信socket创建完成!!!")
buf := make([]byte, 4096)
for {
n, cltAddr, err := udpConn.ReadFromUDP(buf)
if err != nil {
fmt.Println("ReadFromUDP err:", err)
return
}
fmt.Printf("服务器读到 %v 的数据:%s\n", cltAddr, string(buf[:n]))
go func() {
daytime := time.Now().String() + "\n"
_, err = udpConn.WriteToUDP([]byte(daytime), cltAddr)
if err != nil {
fmt.Println("WriteToUDP err:", err)
return
}
}()
}
}
4.文件属性
package main
import (
"fmt"
"os"
)
func main03() {
list := os.Args
fmt.Println(list)
if len(list) != 2 {
fmt.Println("格式为:go run xxx.go 文件名")
return
}
path := list[1]
fileInfo, err := os.Stat(path)
if err != nil {
fmt.Println("os.Stat err:", err)
return
}
fmt.Println("文件名:", fileInfo.Name())
fmt.Println("文件大小:", fileInfo.Size())
}
5.文件传输-发送
package main
import (
"fmt"
"io"
"net"
"os"
)
func sendFile(conn net.Conn, filePath string) {
f, err := os.Open(filePath)
if err != nil {
fmt.Println("os.Open err:", err)
return
}
defer f.Close()
buf := make([]byte, 4096)
for {
n, err := f.Read(buf)
if err != nil {
if err == io.EOF {
fmt.Println("发送文件完成。")
} else {
fmt.Println("os.Open err:", err)
}
return
}
_, err = conn.Write(buf[:n])
if err != nil {
fmt.Println("conn.Write err:", err)
return
}
}
}
func main04() {
list := os.Args
if len(list) != 2 {
fmt.Println("格式为:go run xxx.go 文件绝对路径")
return
}
filePath := list[1]
fileInfo, err := os.Stat(filePath)
if err != nil {
fmt.Println("os.Stat err:", err)
return
}
fileName := fileInfo.Name()
conn, err := net.Dial("tcp", "127.0.0.1:8008")
if err != nil {
fmt.Println("net.Dial err:", err)
return
}
defer conn.Close()
_, err = conn.Write([]byte(fileName))
if err != nil {
fmt.Println("conn.Write err:", err)
return
}
buf := make([]byte, 16)
n, err := conn.Read(buf)
if err != nil {
fmt.Println("conn.Read err:", err)
return
}
if "ok" == string(buf[:n]) {
sendFile(conn, filePath)
}
}
6.文件传输-接收
package main
import (
"fmt"
"net"
"os"
)
func recvFile(conn net.Conn, fileName string) {
f, err := os.Create(fileName)
if err != nil {
fmt.Println("os.Create err:", err)
return
}
defer f.Close()
buf := make([]byte, 4096)
for {
n, _ := conn.Read(buf)
if n == 0 {
fmt.Println("接收文件完成。")
return
}
f.Write(buf[:n])
}
}
func main05() {
listener, err := net.Listen("tcp", "127.0.0.1:8008")
if err != nil {
fmt.Println(" net.Listen err:", err)
return
}
defer listener.Close()
conn, err := listener.Accept()
if err != nil {
fmt.Println(" listener.Accept() err:", err)
return
}
defer conn.Close()
buf := make([]byte, 4096)
n, err := conn.Read(buf)
if err != nil {
fmt.Println(" conn.Read err:", err)
return
}
fileName := string(buf[:n])
conn.Write([]byte("ok"))
recvFile(conn, fileName)
}