为了账号安全,请及时绑定邮箱和手机立即绑定

go语言实现unix domain socket 客户端/服务端

标签:
Go


/*server.go */

package main

import (

        "bufio"

        "fmt"

        "net"

        "time"

)

func main() {

        var unixAddr *net.UnixAddr

        unixAddr, _ = net.ResolveUnixAddr("unix", "/tmp/unix_sock")

        unixListener, _ := net.ListenUnix("unix", unixAddr)

        defer unixListener.Close()

        for {

                unixConn, err := unixListener.AcceptUnix()

                if err != nil {

                        continue

                }

                fmt.Println("A client connected : " + unixConn.RemoteAddr().String())

                go unixPipe(unixConn)

        }

}

func unixPipe(conn *net.UnixConn) {

        ipStr := conn.RemoteAddr().String()

        defer func() {

                fmt.Println("disconnected :" + ipStr)

                conn.Close()

        }()

        reader := bufio.NewReader(conn)

        for {

                message, err := reader.ReadString('\n')

                if err != nil {

                        return

                }

                fmt.Println(string(message))

                msg := time.Now().String() + "\n"

                b := []byte(msg)

                conn.Write(b)

        }

}

/* client.go */

package main

import (

        "bufio"

        "fmt"

        "net"

        "time"

)

var quitSemaphore chan bool

func main() {

        var unixAddr *net.UnixAddr

        unixAddr, _ = net.ResolveUnixAddr("unix", "/tmp/unix_sock")

        conn, _ := net.DialUnix("unix", nil, unixAddr)

        defer conn.Close()

        fmt.Println("connected!")

        go onMessageRecived(conn)

        b := []byte("time\n")

        conn.Write(b)

        <-quitSemaphore

}

func onMessageRecived(conn *net.UnixConn) {

        reader := bufio.NewReader(conn)

        for {

                msg, err := reader.ReadString('\n')

                fmt.Println(msg)

                if err != nil {

                        quitSemaphore <- true

                        break

                }

                time.Sleep(time.Second)

                b := []byte(msg)

                conn.Write(b)

        }

}

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消