Skip to content

Instantly share code, notes, and snippets.

@escrichov
Created March 1, 2016 16:22
Show Gist options
  • Save escrichov/811128d6792e8f9e9ed4 to your computer and use it in GitHub Desktop.
Save escrichov/811128d6792e8f9e9ed4 to your computer and use it in GitHub Desktop.
Basic UDP Server and Client
package main
import (
"flag"
"log"
"net"
"time"
)
var serverAddress *string = flag.String("s", "127.0.0.1:9000", "server address")
func main() {
buf := make([]byte, 0xffff)
flag.Parse()
// Convert address to udp address type
addr, err := net.ResolveUDPAddr("udp", *serverAddress)
if err != nil {
log.Fatal(err)
}
// No set local address. Leverage the operating system to set one for us
conn, err := net.DialUDP("udp", nil, addr)
if err != nil {
log.Fatal(err)
}
// Send a message with the specified payload
buf = []byte("hello")
n, err := conn.Write(buf)
if err != nil {
log.Fatal(err)
}
log.Println("SEND:", string(buf[:n]))
// Wait for response packet and set a timeout of a second if not packet is received
conn.SetReadDeadline(time.Now().Add(time.Second * 1))
n, err = conn.Read(buf)
if err != nil {
log.Fatal(err)
}
log.Println("RECV:", string(buf[:n]))
}
package main
import (
"flag"
"log"
"net"
)
var serverAddress *string = flag.String("s", "127.0.0.1:9000", "server address")
func main() {
buf := make([]byte, 0xffff)
flag.Parse()
// Convert address to udp address type
addr, err := net.ResolveUDPAddr("udp", *serverAddress)
if err != nil {
log.Fatal(err)
}
// Create socket, bind to addr and start listening
conn, err := net.ListenUDP("udp", addr)
if err != nil {
log.Fatal(err)
}
log.Println("Listening on", addr)
for {
// Waiting for new packet
n, addr, err := conn.ReadFromUDP(buf)
if err != nil {
log.Println(err)
continue
}
log.Printf("RECV: %s from %s\n", buf[:n], addr.String())
// Echo packet to client
n, err = conn.WriteToUDP(buf[:n], addr)
if err != nil {
log.Println(err)
continue
}
log.Printf("SEND: %s to %s\n", buf[:n], addr.String())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment