Go中的Unix套接字

我正在尝试制作一个使用Unix套接字的简单回显客户端和服务器。在此示例中,连接似乎是单向的。服务器可以从客户端接收数据,但是不能将数据发回。如果我改用tcp连接,效果很好。有人知道怎么了吗?


服务器

package main


import "net"

import "fmt"


func echoServer(c net.Conn) {

    for {

        buf := make([]byte, 512)

        nr, err := c.Read(buf)

        if err != nil {

            return

        }


        data := buf[0:nr]

        fmt.Printf("Received: %v", string(data))

        _, err = c.Write(data)

        if err != nil {

            panic("Write: " + err.String())

        }

    }

}


func main() {

    l, err := net.Listen("unix", "/tmp/echo.sock")

    if err != nil {

        println("listen error", err.String())

        return

    }


    for {

        fd, err := l.Accept()

        if err != nil {

            println("accept error", err.String())

            return

        }


        go echoServer(fd)

    }

}

客户

package main


import "net"

import "time"


func main() {

    c,err := net.Dial("unix","", "/tmp/echo.sock")

    if err != nil {

        panic(err.String())

    }

    for {

        _,err := c.Write([]byte("hi\n"))

        if err != nil {

            println(err.String())

        }

        time.Sleep(1e9)

    }

}


qq_遁去的一_1
浏览 275回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go