Reputation: 39
I want to send data out via TCP, but I do not know should call Write method directly or call Write method in for loop.
So I want to know these functions below which is corrent.
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
}
}
}
Upvotes: 1
Views: 1680
Reputation: 51657
According to io.Write
documentation:
Write writes len(p) bytes from p to the underlying data stream. It returns the number of bytes written from p (0 <= n <= len(p)) and any error encountered that caused the write to stop early. Write must return a non-nil error if it returns n < len(p).
So, you can simply call Write
without a loop.
Upvotes: 1