我正在尝试制作一个使用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)
}
}
String()
函数已被替换为Error()
,而net
的Dial()
函数不再有第二个参数。这里是我提供的修复建议,但被拒绝了:https://gist.github.com/nelsonjchen/510ab59caa85251c4709。 - nelsonjchen