From d2a4c831a4e10133c6ebb376d7e8243c23bdb8d2 Mon Sep 17 00:00:00 2001 From: yumaojun03 <719118794@qq.com> Date: Sun, 29 Mar 2026 17:54:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0udp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day09/goroutine/arch.drawio | 18 +++++++++++++++++ day09/tcp/flow.drawio | 22 +++++++++++++++----- day09/upd/README.md | 2 ++ day09/upd/client/README.md | 2 ++ day09/upd/client/main.go | 39 ++++++++++++++++++++++++++++++++++++ day09/upd/server/README.md | 2 ++ day09/upd/server/main.go | 40 +++++++++++++++++++++++++++++++++++++ 7 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 day09/upd/README.md create mode 100644 day09/upd/client/README.md create mode 100644 day09/upd/client/main.go create mode 100644 day09/upd/server/README.md create mode 100644 day09/upd/server/main.go diff --git a/day09/goroutine/arch.drawio b/day09/goroutine/arch.drawio index 99eedd9..05c6869 100644 --- a/day09/goroutine/arch.drawio +++ b/day09/goroutine/arch.drawio @@ -79,6 +79,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/day09/tcp/flow.drawio b/day09/tcp/flow.drawio index df6c1ca..2de77ea 100644 --- a/day09/tcp/flow.drawio +++ b/day09/tcp/flow.drawio @@ -1,11 +1,11 @@ - + - - + + @@ -26,7 +26,7 @@ - + @@ -41,7 +41,7 @@ - + @@ -63,6 +63,18 @@ + + + + + + + + + + + + diff --git a/day09/upd/README.md b/day09/upd/README.md new file mode 100644 index 0000000..f3e1f86 --- /dev/null +++ b/day09/upd/README.md @@ -0,0 +1,2 @@ +# UDP编程 + diff --git a/day09/upd/client/README.md b/day09/upd/client/README.md new file mode 100644 index 0000000..5ad9170 --- /dev/null +++ b/day09/upd/client/README.md @@ -0,0 +1,2 @@ +# 客户端 + diff --git a/day09/upd/client/main.go b/day09/upd/client/main.go new file mode 100644 index 0000000..b2b1d3c --- /dev/null +++ b/day09/upd/client/main.go @@ -0,0 +1,39 @@ +package main + +import ( + "fmt" + "io" + "net" +) + +func main() { + // 1. 连接服务器 + conn, err := net.Dial("udp", "localhost:9999") + if err != nil { + fmt.Println("Error connecting:", err) + return + } + defer conn.Close() + fmt.Println("Connected to server") + + // 2. 发送数据 + _, err = conn.Write([]byte("Hello, Server! I am a client.")) + if err != nil { + fmt.Println("Error writing data:", err) + return + } + fmt.Println("Written 22 bytes:", "Hello, Server! I am a client.") + + // 3. 接收数据 + buf := make([]byte, 1500) + n, err := conn.Read(buf) + if err == io.EOF { + fmt.Println("Server closed connection") + return + } + if err != nil { + fmt.Println("Error reading data:", err) + return + } + fmt.Println("Read", len(buf), "bytes:", "Hello, Server! I have received your message: "+string(buf[:n])+"\n") +} diff --git a/day09/upd/server/README.md b/day09/upd/server/README.md new file mode 100644 index 0000000..56d4a3c --- /dev/null +++ b/day09/upd/server/README.md @@ -0,0 +1,2 @@ +# 服务端 + diff --git a/day09/upd/server/main.go b/day09/upd/server/main.go new file mode 100644 index 0000000..a1406f8 --- /dev/null +++ b/day09/upd/server/main.go @@ -0,0 +1,40 @@ +package main + +import ( + "fmt" + "log" + "net" +) + +func main() { + // 监听 UDP 9999,可接收任意客户端数据报 + pc, err := net.ListenPacket("udp", ":9999") + if err != nil { + log.Fatal(err) + } + defer pc.Close() + fmt.Println("Server is listening on port 9999") + + // 循环读取数据 + for { + // 准备一个buf来读取包的内容 + buf := make([]byte, 1024) + n, addr, err := pc.ReadFrom(buf) + // 如果读取失败,则继续下一次循环 + if err != nil { + fmt.Println("Error reading data:", err) + continue + } + // 业务处理: 打印读取到的数据 + fmt.Println("Read", n, "bytes from", addr) + fmt.Println("Data:", string(buf[:n])+"\n") + + // 写入数据(回复客户端, 回一个包) + _, err = pc.WriteTo([]byte("Hello, Client! I have received your message: "+string(buf[:n])+"\n"), addr) + if err != nil { + fmt.Println("Error writing data:", err) + continue + } + fmt.Println("Written", len(buf), "bytes to", addr) + } +}