You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.0 KiB
102 lines
2.0 KiB
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()
|
|
}
|