2016-09-08 2 views
0

Le serveur est écrit en C# et fonctionne correctement avec un client que j'ai fait en C#, maintenant j'essaye de faire un client android mais le serveur ne reçoit pas le vrai message, ça devient juste beaucoup de points d'interrogation.Le serveur TCP obtient ???????? au lieu du vrai message

Voici le serveur

TcpListener listen = new TcpListener(IPAddress.Any, 1200); 
TcpClient client; 
listen.Start(); 
client = listen.AcceptTcpClient(); 
NetworkStream stream = client.GetStream(); 
byte[] buffer = new byte[client.ReceiveBufferSize]; 
int data = stream.Read(buffer, 0, client.ReceiveBufferSize); 
string message = Encoding.Unicode.GetString(buffer, 0, data); 
Console.WriteLine(message); 

c'est le client Android

EditText et = (EditText) findViewById(R.id.EditText01); 
String str = et.getText().toString() 
PrintWriter out = new PrintWriter(new BufferedWriter(
      new OutputStreamWriter(socket.getOutputStream())), 
       true); 
out.println(str); 

Par exemple, si je vous envoie le message "Bonjour", les impressions du serveur « ???????? ??? " et il arrive la même chose pour tout message que j'envoie, même seulement 1 lettre

J'ai aussi essayé différentes méthodes comme celui-ci, mais le résultat est le même:

DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
     out.writeBytes(str); 
+1

Cela ressemble à un problème d'encodage. Vérifiez quel encodage est défini sur le serveur –

+0

Que voulez-vous dire Nikita? J'ai essayé de changer le client Android dans PrintStream out = new PrintStream (socket.getOutputStream()); mais je reçois toujours la même erreur – Alessandro

+0

'String str = et.getText(). ToString()'. Mieux vaut utiliser une chaîne prédéfinie. Et dites-nous combien d'octets sont envoyés et combien d'octets ont été reçus. – greenapps

Répondre

0

Change:

string message = Encoding.Unicode.GetString(buffer, 0, data); 

dans:

string message = Encoding.UTF8.GetString(buffer, 0, data); 

Essayez aussi UTF16. Je pense que Java utilise ce codage maintenant.

+0

ouais, de cette façon cela fonctionne. est-il un moyen de faire android envoie le message en unicode au lieu de utf8? – Alessandro

+0

Voir ceci: http://stackoverflow.com/questions/18606523/how-to-convert-utf-8-to-unicode-in-java – AhmadWabbi