手记

go语言unix域套接字发送udp报文


/* server.go */

package main

import (

        "fmt"

        "net"

        "os"

)

func checkError(err error) {

        if err != nil {

                fmt.Printf("Error: %s\n", err.Error())

                os.Exit(1)

        }

}

func recvUnixMsg(conn *net.UnixConn) {

        var buf [20]byte

        n, raddr, err := conn.ReadFromUnix(buf[0:])

        fmt.Println(raddr)

        if err != nil {

                return

        }

        fmt.Println("msg is ", string(buf[0:n]))

        _, err = conn.WriteToUnix([]byte("nice to see u"), raddr)

        checkError(err)

}

func main() {

        laddr, err := net.ResolveUnixAddr("unixgram", "/tmp/unix_gram_sock")

        checkError(err)

        conn, err := net.ListenUnixgram("unixgram", laddr)

        checkError(err)

        recvUnixMsg(conn)

}

/* client.so */

package main

import (

        "fmt"

        "net"

        "os"

)

func checkError(err error) {

        if err != nil {

                fmt.Printf("Error: %s\n", err.Error())

                os.Exit(1)

        }

}

func main() {

        raddr, err := net.ResolveUnixAddr("unixgram", "/tmp/unix_gram_sock")

        checkError(err)

        laddr, err := net.ResolveUnixAddr("unixgram", "/tmp/unix_gram_sock_cli")

        checkError(err)

        conn, err := net.DialUnix("unixgram", laddr, raddr)

        checkError(err)

        defer conn.Close()

        if err != nil {

                os.Exit(1)

        }

        n, err := conn.Write([]byte("Hello world"))

        fmt.Printf("send msg n:%d\n", n)

        var msg [20]byte

        conn.Read(msg[0:])

        fmt.Println("msg is", string(msg[0:10]))

}

©著作权归作者所有:来自51CTO博客作者ebayboy的原创作品,如需转载,请注明出处,否则将追究法律责任


0人推荐
随时随地看视频
慕课网APP