es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada al método Write de TCPConn de golang.

Quiero enviar datos a través de TCP, pero no sé si debería llamar directamente al método Write o llamar al método Write dentro de un bucle for.

Entonces quiero saber cuál de estas funciones a continuación es correcta.

func sendData_Method2(data string) {

/*
    El método tcpConn.Write será bloqueado hasta que se envíen todos los datos.
*/

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) {

/*
    Se necesita llamar al método tcpConn.Write en un bucle for hasta que se envíen todos los datos.
*/

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
    }
}

}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Si los datos a ser enviados son pequeños, se recomienda utilizar sendData_Method2, ya que llama directamente a tcpConn.Write, lo que será bloqueado hasta que todos los datos sean enviados.

    Si los datos a ser enviados son grandes, se recomienda utilizar sendData_Method1, ya que llama a tcpConn.Write en un ciclo hasta que todos los datos sean enviados. Esto es para evitar la sobrecarga del búfer de red, ya que escribir todos los datos de una vez puede hacer que el búfer se llene y ralentice el proceso de envío.

Comments are closed.