【发布时间】: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
}
}
}
【问题讨论】:
-
当数据很大时,说一个大文件。循环会节省一些内存。