frycco
Messages postés2Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 9 mars 2008
-
8 mars 2008 à 14:36
frycco
Messages postés2Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 9 mars 2008
-
9 mars 2008 à 13:09
Bonjour à tous,
Voilà, j'ai un souci de communication entre mon client C# et mon serveur JAVA. Mon client, se connecte correctement à mon serveur mais je n'arrive pas à lui transmettre un message de type string encodé en UTF-8.
voilà le bout de code de réception du serveur JAVA :
BufferedInputStream bufferedinputstream = new BufferedInputStream(clientSocket.getInputStream());
DataInputStream datainputstream = new DataInputStream(bufferedinputstream);
String Message= datainputstream.readUTF();
Code de mon Client C# :
String Header = "MON MESSAGE";
TcpClient socket = new TcpClient();
IPEndPoint server = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
try
{
socket.Connect(server);
NetworkStream nstream = socket.GetStream();
BufferedStream bstream = new BufferedStream(nstream);
BinaryWriter writer = new BinaryWriter(bstream);
byte[] encoded = new System.Text.UTF8Encoding(false).GetBytes(Header);
nstream.Write(encoded, 0, encoded.Length);
Le problème est que mon serveur JAVA reste figé sur la méthode readUTF();
J'ai modifié mon serveur JAVA pour tester la réception :
BufferedInputStream bufferedinputstream = new BufferedInputStream(clientSocket.getInputStream());
DataInputStream datainputstream = new DataInputStream(bufferedinputstream);
byte[] toto = new byte[20];
datainputstream.read(toto);
System.out.println(new String(toto));
J'obtiens en sortie le message : MON MESSAGE
Donc la transmission de paquets fonctionne, j'ai vraiment le sentiment que le problème vient du type d'encodage.
ça fait deux jours que je galère dessus.
Votre aide est la bienvenue.
Merci
frycco
Messages postés2Date d'inscriptionlundi 7 juillet 2003StatutMembreDernière intervention 9 mars 2008 9 mars 2008 à 13:09
J'ai trouvé la solution, JAVA utilise un encodage UTF-8 modifié (non standard).
Pour résoudre le problème, il suffit d'écrire la classe DataOutputStream dérivé de BinaryWriter :
public class DataOutputStream : BinaryWriter
{
public DataOutputStream(Stream stream) : base(stream) { }
public void writeUTF(String str)
{
int strlen = str.Length;
int utflen = 0;
int c, count = 0;
char[] charr = str.ToCharArray();
for (int i = 0 ; i < strlen ; i++) {
c = charr[i];
if ((c >= 0x0001) && (c <= 0x007F)) {
utflen++;
} else if (c > 0x07FF) {
utflen += 3;
} else {
utflen += 2;
}
}