【问题标题】:golang TCPConn.Write method callgolang TCPConn.Write 方法调用
【发布时间】:2021-12-31 19:00:27
【问题描述】:

我想通过TCP发送数据,但不知道是直接调用Write方法还是在for循环中调用Write方法。

所以我想知道下面这些函数是正确的。

func sendData_Method2(data string) {

    /*
        method tcpConn.Write will be blocked until all data sent out.
    */

    addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 8899))
    if err != nil {
        log.Println(err)
        return
    }

    tcpConn, err := net.DialTCP("tcp", nil, addr)
    if err != nil {
        log.Println(err)
        return
    }
    defer tcpConn.Close()

    if _, err := tcpConn.Write([]byte(data)); err != nil {
        log.Println(err)
    }

}
func sendData_Method1(data string) {

    /*
        need call method tcpConn.Write in for loop until all data sent out.
    */


    addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 8899))
    if err != nil {
        log.Println(err)
        return
    }

    tcpConn, err := net.DialTCP("tcp", nil, addr)
    if err != nil {
        log.Println(err)
        return
    }
    defer tcpConn.Close()

    dataWillSend := []byte(data)
    lengthOfWillSend := len(dataWillSend)
    startPosi := 0

    for {
        n, err := tcpConn.Write(dataWillSend[startPosi:])
        if err != nil {
            log.Println(err)
            return
        }
        lengthOfWillSend -= n
        startPosi = n
        if lengthOfWillSend == 0 {
            break
        }
    }
}

【问题讨论】:

标签: go tcp


【解决方案1】:

根据io.Write 文档:

Write 将 len(p) 个字节从 p 写入底层数据流。它返回从 p (0

因此,您可以简单地调用Write 而无需循环。

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多