Skip to content

Instantly share code, notes, and snippets.

@majek
Last active August 29, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save majek/5e911b474cccabbba22f to your computer and use it in GitHub Desktop.
Save majek/5e911b474cccabbba22f to your computer and use it in GitHub Desktop.

How to run:

go build udp.go; sudo bash -c "ulimit -n 100000; ./udpserver"
go build udpclient.go && ./udpclient
sudo netstat -l4np --udp|grep :1234|tr -s " "|egrep -v "p 0"

Sample output

127.0.87.133:1234    0.347 ms
127.0.123.255:1234   0.268 ms
127.0.152.154:1234   0.263 ms
127.0.116.156:1234   0.252 ms
127.0.62.151:1234    0.274 ms
127.0.120.152:1234   0.172 ms
...
package main
import (
"fmt"
"math/rand"
"net"
"os"
"time"
)
func main() {
readbuf := make([]byte, 4096)
writebuf := []byte("behlod!")
for {
i := 1 + rand.Intn(255)
j := 1 + rand.Intn(255)
addrStr := fmt.Sprintf("127.0.%d.%d:1234", i, j)
addr, err := net.ResolveUDPAddr("udp", addrStr)
if err != nil {
fmt.Fprintf(os.Stderr, "net.ResolveUDPAddr() %v\n", err)
os.Exit(3)
}
t0 := time.Now()
cli, err := net.DialUDP("udp", nil, addr)
if err != nil {
fmt.Fprintf(os.Stderr, "net.DialUDP() %v\n", err)
os.Exit(3)
}
_, err = cli.Write(writebuf)
if err != nil {
panic("")
}
_, err = cli.Read(readbuf[:])
if err != nil {
panic("")
}
td := time.Now().Sub(t0)
fmt.Printf("%-20s %.3f ms\n",
addrStr,
float64(td.Nanoseconds()) / 1000. / 1000.)
cli.Close()
time.Sleep(200 * time.Millisecond)
}
}
package main
import (
"fmt"
"net"
"os"
"time"
)
func main() {
for i := 1; i< 256; i++ {
for j := 1; j< 256; j++ {
addrStr := fmt.Sprintf("127.0.%d.%d:1234", i, j)
addr, err := net.ResolveUDPAddr("udp", addrStr)
if err != nil {
fmt.Fprintf(os.Stderr, "net.ResolveUDPAddr() %v\n", err)
os.Exit(3)
}
srv, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Fprintf(os.Stderr, "net.ListenUDP() %v\n", err)
os.Exit(3)
}
go func (){
buf := make([]byte, 4096)
for {
n, caddr, err := srv.ReadFromUDP(buf[:])
if err != nil {
fmt.Fprintf(os.Stderr, "Recv %v\n", err)
os.Exit(3)
}
srv.WriteToUDP(buf[:n], caddr)
}
}()
}
}
for {
time.Sleep(1 * time.Second)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment