¿Qué tipo de datos debo usar para enviar una matriz de caracteres a un servidor usando sockets, char [] o uint8_t []?

Yo diría que realmente no importa, siempre y cuando realmente pienses en el texto. El principal problema con el tipo de caracteres y la portabilidad es que en algunas plataformas el valor predeterminado para el tipo de caracteres está firmado y en algunos no está firmado. Importa si sus datos son algo más que solo texto.

Ahora, elegir el tipo ISO estandarizado uint8_t le dice explícitamente al compilador que sus datos son caracteres sin signo. Si bien es probable que esté bien para enviar datos, otras funciones relacionadas con el texto pueden detener la compilación si se firma el carácter predeterminado.

Una de las desventajas de C y C ++ es la falta de tipos distinguibles para un número de tamaño de byte y el carácter del texto. El uint8_t es solo un alias de tipo char sin signo. Esto conduce a errores fáciles de hacer en C ++ cuando las transmisiones se utilizan como caracteres de impresión, ya que el número requiere una conversión.

Depende de lo que el servidor esté esperando.

Y, por supuesto, qué idioma, qué protocolo de transferencia y muchas otras variables …