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)
+ }
+}