Bon ba problème résolu, j'ai trouvé la solution.
Du côté serveur je créer un char* appelé tempbuffer qui est de la taille de mon buffer que je reçois encodé par le client.
Je remplis ce tempbuffer en castant chaque lettre du buffer reçu en char pour que ca soit compatible.
On rajoute le '\0' a la fin de la chaîne pour dire que c'est la fin de la chaîne.
Et finalement je créer un System::String avec le tempbuffer.
Et le tour est joué
Voici le code si ca interesse des gens :
char* tempbuffer = new char[buffer->Length+1];
for(int i=0; i<buffer->Length; i++)
tempbuffer[i] = safe_cast<char>(buffer[i]);
tempbuffer[buffer->Length] = (char)0;
String ^str = gcnew String(tempbuffer);
delete tempbuffer;
Console::WriteLine("Le client a envoyé : {0}.",str);
delete str;