/
main.go
86 lines (72 loc) · 1.9 KB
/
main.go
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
83
84
85
86
/** **************************************************************************
* Copyright (c) 2015 Lobaro UG (haftungsbeschränkt)
* T.Rohde
*
* ### Lobaro.com Simple UDP Test ###
*
* Description:
* - This app sends out the current time as string to an given IPv6 address via UDP.
* - The interval for transmison of these udp packets is one second.
* - The remote address and port must be set as commandline parameter.
* - Local port will be choosen randomly by the operating system.
* - Any received data will be simly shown on the command line as string.
*
*****************************************************************************/
package main
import (
"net"
"log"
"fmt"
"time"
"os"
)
func main() {
argcnt := len(os.Args)
if argcnt != 2 {
fmt.Println("usage: udptest.exe [IPv6_of_LobaroBox:Port]\r\nExample: udptest.exe [fe80:0000:0000:0000:0211:7d00:0030:8e3f]:5684")
return
}
//Remote Addr
BoxAddr, err := net.ResolveUDPAddr("udp6", os.Args[1])
if(err != nil) {
log.Fatal(err)
return
}
LocalAddr, err := net.ResolveUDPAddr("udp6", ":0") //:0 => OS sets local port
if(err != nil) {
log.Fatal(err)
return
}
c, err := net.ListenUDP("udp6", LocalAddr)
if(err != nil) {
log.Fatal(err)
return
}
defer c.Close()
fmt.Println("Start Listening to:", c.LocalAddr())
//readsocket loop
go func(c *net.UDPConn) {
for {
rxMsg := make([]byte, 512);
n,remote, err := c.ReadFromUDP(rxMsg)
if(err != nil) {
log.Fatal(err)
return
} else {
fmt.Println("Got from ",remote," ", n, "Bytes: ", string(rxMsg[:n]))
}
}
}(c)
//write every second current time string to remote "LOBARO IPV6 UNIVERSAL BOX"
for {
b := []byte(time.Now().String())
n, err :=c.WriteTo(b,BoxAddr)
if(err != nil) {
log.Fatal(err)
return
} else {
fmt.Println("Wrote to ", BoxAddr," ",n, " Bytes: ", string(b[:n]))
}
time.Sleep(1000 * time.Millisecond)
}
}