Created
March 1, 2016 16:22
-
-
Save escrichov/811128d6792e8f9e9ed4 to your computer and use it in GitHub Desktop.
Basic UDP Server and Client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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])) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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