Skip to content

Instantly share code, notes, and snippets.

@ginokent
Created October 13, 2019 08:13
Show Gist options
  • Save ginokent/2b5ec36fdea0f6cae19528d177bb8a27 to your computer and use it in GitHub Desktop.
Save ginokent/2b5ec36fdea0f6cae19528d177bb8a27 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"net"
"sync"
"time"
)
const serverAddr string = "127.0.0.1:50000"
var bufferPool = &sync.Pool{
New: func() interface{} {
return make([]byte, 10)
},
}
func main() {
// サーバー
serverConn, err := net.ListenPacket("udp", serverAddr)
if err != nil {
log.Printf("error: net.ListenPacket(): %v\n", err)
return
}
go func() {
for {
buf := bufferPool.Get().([]byte)
length, clientAddr, err := serverConn.ReadFrom(buf)
if err != nil {
log.Printf("error: serverConn.ReadFrom(): %v\n", err)
}
go func(buf []byte) {
fmt.Printf("client: %s, length: %d, data: %#v\n", clientAddr.String(), length, buf)
bufferPool.Put(buf)
}(buf)
}
}()
// クライアント
clientConn, err := net.Dial("udp", serverAddr)
if err != nil {
log.Fatalf("error: net.Dial(): %v\n", err)
}
for range time.Tick(1 * time.Second) {
clientConn.Write([]byte{0x01, 0x02, 0x03, 0x04})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment