Skip to main content

Go tcp client 코드 예제

func SendCloudWatch(cloudwatch model.AwsRdsCloudWatch) {
    // ... 생략

	conn, err := net.Dial("tcp", fmt.Sprintf("%s:%s", host, portStr))
	if err != nil {
		logger.Error("Failed to connect to TCP server:", err)
		return
	}
	defer conn.Close()

	if err := send(conn, data.ToByteArray()); err != nil {
		logger.Error("Failed to send data:", err)
	}
}

defer 는 예약하는 역할.

func send(conn net.Conn, data []byte) error {
	const writeTimeout = 5 * time.Second
	totalBytesSent := 0

	for totalBytesSent < len(data) {
		writeDeadline := time.Now().Add(writeTimeout)
		if err := conn.SetWriteDeadline(writeDeadline); err != nil {
			return fmt.Errorf("failed to set write deadline: %v", err)
		}
		bytesSent, err := conn.Write(data[totalBytesSent:])
		if err != nil {
			return fmt.Errorf("failed to send data: %v", err)
		}
		totalBytesSent += bytesSent
	}
	return nil
}