将多个 tcp 流写入单个文件的最佳方法是什么?

我有多个二进制传入 tcp 流,不断地随机到达。我想将它们中的每一个写入单独的文件。这些文件应该包含从连接的初始打开到远程客户端关闭连接的所有内容。


我在下面有这个,它似乎有效,但这是一种有效的方法吗?


//error handling to be added later


func main() {


    listen, _ := net.Listen("tcp4", ":8080")

    defer listen.Close()


    for {

        connection, _ := listen.Accept()

        defer connection.Close()


        //"myfile.dat" to be replaced later with variable creating unique names

        go handleConnection(connection, "myfile.dat")

    }

}


func handleConnection(connection net.Conn, myFile string) {


    outputFile, _ := os.Create(myFile)

    defer outputFile.Close()

    fileWriter := bufio.NewWriter(outputFile)


    for {

        serverConnReader := bufio.NewReader(connection)

        io.Copy(fileWriter, serverConnReader)

        break

    }

}


慕丝7291255
浏览 68回答 1
1回答

长风秋雁

关于代码的一些注释:处理错误。defer connection.Close()在handleConnection. 否则,连接不会关闭,直到程序终止。将两行代码handleConnection移出for循环,丢弃for循环。循环没有做任何事情。添加defer fileWriter.Flush()以刷新写入器中缓冲的任何最后一位数据(但请参阅下一点)。要求文件直接从连接中复制。这是代码:func main() {    listen, err := net.Listen("tcp4", ":8080")    if err != nil {        log.Fatal(err)    }    defer listen.Close()    for {        connection, err := listen.Accept()        if err != nil {            log.Fatal(err)        }        go handleConnection(connection, "myfile.dat")    }}func handleConnection(connection net.Conn, myFile string) {    defer connection.Close()    outputFile, err := os.Create(myFile)    if err != nil {        log.Fatal(err)    }    defer outputFile.Close()    _, err = outputFile.ReadFrom(connection)    if err != nil {        log.Fatal(err)    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go