Go语言TCP/UDP Socket编程
1. TCP编程
TCPClient
// TCPClient project main.go package main import ( "fmt" "net" "os" ) func main() { var buf [512]byte if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s host:port ", os.Args[0]) os.Exit(1) } service := os.Args[1] tcpAddr, err := net.ResolveTCPAddr("tcp4", service) checkErr(err) conn, err := net.DialTCP("tcp", nil, tcpAddr) defer conn.Close() checkErr(err) rAddr := conn.RemoteAddr() n, err := conn.Write([]byte("Hello server!")) checkErr(err) n, err = conn.Read(buf[0:]) checkErr(err) fmt.Println("Reply from server ", rAddr.String(), string(buf[0:n])) os.Exit(0) } func checkErr(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } }
TCPServer
// TCPServer project main.go package main import ( "fmt" "net" "os" ) func main() { service := ":5000" tcpAddr, err := net.ResolveTCPAddr("tcp4", service) checkErr(err) listener, err := net.ListenTCP("tcp", tcpAddr) checkErr(err) for { conn, err := listener.Accept() if err != nil { continue } go handleClient(conn) } } func checkErr(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } } func handleClient(conn net.Conn) { defer conn.Close() var buf [512]byte for { n, err := conn.Read(buf[0:]) if err != nil { return } rAddr := conn.RemoteAddr() fmt.Println("Receive from client", rAddr.String(), string(buf[0:n])) _, err2 := conn.Write([]byte("Welcome client!")) if err2 != nil { return } } }
2. UDP编程
UPDClient
// UDPClient project main.go package main import ( "fmt" "net" "os" ) func main() { var buf [512]byte if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s host:port ", os.Args[0]) os.Exit(1) } service := os.Args[1] udpAddr, err := net.ResolveUDPAddr("udp4", service) checkErr(err) conn, err := net.DialUDP("udp", nil, udpAddr) defer conn.Close() checkErr(err) rAddr := conn.RemoteAddr() n, err := conn.Write([]byte("Hello server!")) checkErr(err) n, err = conn.Read(buf[0:]) checkErr(err) fmt.Println("Reply from server ", rAddr.String(), string(buf[0:n])) os.Exit(0) } func checkErr(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } }
UDPServer
// UDPServer project main.go package main import ( "fmt" "net" "os" ) func main() { service := ":5000" udpAddr, err := net.ResolveUDPAddr("udp4", service) checkErr(err) conn, err := net.ListenUDP("udp", udpAddr) checkErr(err) for { handleClient(conn) } } func checkErr(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } } func handleClient(conn *net.UDPConn) { defer conn.Close() var buf [512]byte for { n, rAddr, err := conn.ReadFromUDP(buf[0:]) if err != nil { return } fmt.Println("Receive from client", rAddr.String(), string(buf[0:n])) _, err2 := conn.WriteToUDP([]byte("Welcome client!"), rAddr) if err2 != nil { return } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决