Skip to content

Instantly share code, notes, and snippets.

@kawasin73
Created August 9, 2019 05:47
Show Gist options
  • Save kawasin73/bc4c7bb1c5fc133ce76fa45c6315d5fa to your computer and use it in GitHub Desktop.
Save kawasin73/bc4c7bb1c5fc133ce76fa45c6315d5fa to your computer and use it in GitHub Desktop.
ipsock を試した
package main
import (
"log"
"net"
"sync"
"time"
)
func main() {
srcaddr, err := net.ResolveIPAddr("ip4", "169.254.251.212")
if err != nil {
log.Panic(err)
}
destaddr, err := net.ResolveIPAddr("ip4", "169.254.22.60")
if err != nil {
log.Panic(err)
}
conn, err := net.DialIP("ip4:101", srcaddr, destaddr)
if err != nil {
log.Panic(err)
}
defer conn.Close()
log.Println("hello world")
lconn, err := net.ListenIP("ip4:101", destaddr)
if err != nil {
log.Panic(err)
}
var wg sync.WaitGroup
log.Println("allocated")
time.Sleep(10 * time.Second)
log.Println("start")
wg.Add(2)
go func() {
defer wg.Done()
msg := []byte("hello world!!")
if _, err := conn.Write(msg); err != nil {
log.Panic("failed to write :", err)
}
}()
go func() {
defer wg.Done()
var buf [1500]byte
for {
n, addr, err := lconn.ReadFromIP(buf[:])
if err != nil {
log.Panic("failed to read :", err)
}
log.Println("read from :", addr)
if addr.String() == srcaddr.String() {
log.Println("this is exact addr")
log.Printf("msg :\"%s\"\n", string(buf[:n]))
break
}
}
}()
wg.Wait()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment