1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
package main
import (
"encoding/csv"
"encoding/hex"
"flag"
"fmt"
"io"
"net"
"os"
"time"
)
var ip string
var port int
var beat int
var delay int
var path string
func main() {
flag.StringVar(&ip, "ip", "47.93.20.187", "服务端ip")
flag.IntVar(&port, "port", 9001, "服务端port")
flag.IntVar(&beat, "beat", 10, "心跳间隔单位秒")
flag.IntVar(&delay, "delay", 100, "建立客户端延时单位毫秒")
flag.StringVar(&path, "path", "test.csv", "csv文件路径")
flag.Parse()
file, err := os.Open(path)
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
reader.FieldsPerRecord = -1
var data [][]string
for {
csvdata, err := reader.Read() // 按行读取数据,可控制读取部分
if err == io.EOF {
break
}
data = append(data, csvdata)
}
ch := make(chan struct{}, 1)
for k, line := range data {
if k == 0 {
continue
}
go tcp(k, line[0], line[1])
if err != nil {
panic(err)
}
time.Sleep(time.Duration(delay) * time.Millisecond)
}
<-ch
return
}
func tcp(num int, signIn, heartbeat string) {
p1, _ := hex.DecodeString(signIn)
p2, _ := hex.DecodeString(heartbeat)
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", ip, port))
if err != nil {
panic(err)
}
fmt.Println("客户端" + fmt.Sprintf("%d", num) + "成功")
fmt.Println("时间:" + time.Now().Format(time.DateTime))
if _, err := conn.Write(p1); err != nil {
panic(err)
}
ticker := time.NewTicker(time.Second * time.Duration(beat)) // 创建一个定时器
defer ticker.Stop()
for range ticker.C {
// 发送心跳消息
_, err := conn.Write(p2)
if err != nil {
panic(err)
}
fmt.Println("发送心跳成功 时间:" + time.Now().Format(time.RFC3339))
}
}
|