登录
首页 >  Golang >  Go问答

golang TCPConn.Write方法调用

来源:stackoverflow

时间:2024-04-08 20:00:29 273浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《golang TCPConn.Write方法调用》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我想通过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
        }
    }
}

正确答案


根据 io.Write 文档:

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

终于介绍完啦!小伙伴们,这篇关于《golang TCPConn.Write方法调用》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>