package netProgram import ( "log" "net" "sync" "time" ) // 客户端 func TcpClient() { // tcp服务端地址 //serverAddress := "127.0.0.1:5678" // tcp协议类型 serverAddress := "[::1]:5678" // IPv6 //serverAddress := "127.0.0.1:5678" // IPv4 // 模拟多客户端 // 并发的客户端请求 num := 10 wg := sync.WaitGroup{} wg.Add(num) for i := 0; i < num; i++ { // 并发请求 go func(wg *sync.WaitGroup) { defer wg.Done() // A. 建立连接 conn, err := net.Dial(tcp, serverAddress) if err != nil { log.Println(err) return } // 保证关闭 defer conn.Close() log.Printf("connection is establish, client addr is %s\n", conn.LocalAddr()) }(&wg) } wg.Wait() } func TcpTimeoutClient() { // tcp服务端地址 serverAddress := "192.168.110.123:5678" // IPv6 4 // 模拟多客户端 // 并发的客户端请求 num := 10 wg := sync.WaitGroup{} wg.Add(num) for i := 0; i < num; i++ { // 并发请求 go func(wg *sync.WaitGroup) { defer wg.Done() // A. 建立连接 conn, err := net.DialTimeout(tcp, serverAddress, time.Second) //conn, err := net.Dial(tcp, serverAddress) if err != nil { log.Println(err) return } // 保证关闭 defer conn.Close() log.Printf("connection is establish, client addr is %s\n", conn.LocalAddr()) }(&wg) } wg.Wait() } func TcpBacklogClient() { // tcp服务端地址 serverAddress := "127.0.0.1:5678" // IPv6 4 // 模拟多客户端 // 并发的客户端请求 num := 256 wg := sync.WaitGroup{} wg.Add(num) for i := 0; i < num; i++ { // 并发请求 go func(wg *sync.WaitGroup, no int) { defer wg.Done() // A. 建立连接 conn, err := net.DialTimeout(tcp, serverAddress, time.Second) //conn, err := net.Dial(tcp, serverAddress) if err != nil { log.Println(err) return } // 保证关闭 defer conn.Close() log.Printf("%d: connection is establish, client addr is %s\n", no, conn.LocalAddr()) }(&wg, i) time.Sleep(30 * time.Millisecond) } wg.Wait() }