Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 服务器未在";中获取消息;“你好,世界”;套接字程序_Sockets_Unix_Go - Fatal编程技术网

Sockets 服务器未在";中获取消息;“你好,世界”;套接字程序

Sockets 服务器未在";中获取消息;“你好,世界”;套接字程序,sockets,unix,go,Sockets,Unix,Go,我正在练习与bufio一起使用Unix套接字。以下是节目: // Register server socket os.Remove("serversock") socket, err := net.ListenUnix("unix", &net.UnixAddr{"serversock", "unix"}) if err != nil { panic(err) } go func() { for {

我正在练习与bufio一起使用Unix套接字。以下是节目:

    // 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

然后存在,因此服务器似乎无法获取消息。我做错了什么?

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

此外,您的accept循环应该如下所示:

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)
    }
}()