gpt4 book ai didi

sockets - 服务器未在 "Hello World"套接字程序中获取消息

转载 作者:IT王子 更新时间:2023-10-29 02:17:36 24 4
gpt4 key购买 nike

我正在练习将 Unix 套接字与 bufio 一起使用。这是程序:

    // Register server socket
os.Remove("serversock")
socket, err := net.ListenUnix("unix", &net.UnixAddr{"serversock", "unix"})
if err != nil {
panic(err)
}
go func() {
for {
// Accept new connection
conn, err := socket.Accept()
if err != nil {
panic(err)
}
fmt.Println("Got connection")
reader := bufio.NewReader(conn)
line, err := reader.ReadString(byte('\n'))
if err != nil {
panic(err)
}
fmt.Println("Got line", line)
}
}()
// Client connection
conn, err := net.DialUnix("unix", nil, &net.UnixAddr{"serversock", "unix"})
writer := bufio.NewWriter(conn)
n, err := writer.WriteString("hello world\n")
if err != nil {
panic(err)
}
fmt.Println("Written", n)
// Client wait
time.Sleep(1 * time.Second)

当它运行时,它打印:

Written 13
Got connection

然后存在,所以服务器好像没有收到消息。我做错了什么?

最佳答案

你的 writer 是缓冲的,当你 WriteString() 时它不会刷新缓冲区。只需调用 writer.Flush(),它就会实际发送该行。您也可以尝试直接写入套接字,看看会发生什么。

此外,您的接受循环应如下所示:

go func() {
for {
// Accept new connection
conn, err := socket.Accept()
if err != nil {
panic(err)
}
fmt.Println("Got connection")
reader := bufio.NewReader(conn)

//spawn a goroutine that has a read loop
go func(reader *bufio.Reader) {
for {
line, err := reader.ReadString(byte('\n'))
if err != nil {
panic(err)
}
fmt.Println("Got line", line)
}
}(reader)
}
}()

关于sockets - 服务器未在 "Hello World"套接字程序中获取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21810530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com