2017-01-09 7 views
0

J'essaie de communiquer Modrssim (Simulateur Modbus) avec une classe Java. J'envoie une requête à modsim et ça répond à ça. Mais quand j'essaie de lire la réponse, je ne peux pas obtenir le caractère approprié.Recevoir coeur, sourires de Modsim via TCP/IP

Voici mon code:

import java.net.*; 
import java.io.*; 

class client 
{ 
    public static void main(String args[]) throws IOException 
    { 
     Socket s=null; 
     BufferedReader b=null;  
     char data[] ={0,0,0,0,0,6,1,2,0,2,0,0}; 

     try 
     { 
      s=new Socket("199.199.51.7",502); 

      OutputStreamWriter writer = new OutputStreamWriter(s.getOutputStream()); 
      BufferedWriter bw = new BufferedWriter(writer); 
      System.out.println("Sending Data...."); 
      bw.write(data);  
      bw.flush(); 

      b=new BufferedReader(new InputStreamReader(s.getInputStream())); 

     } 

     catch(UnknownHostException u) 
     { 
      System.err.println("I don't know host"); 
      System.exit(0); 
     } 

     String inp; 
     System.out.println("Receiving......"); 
     while((inp=b.readLine())!=null) 

     { 

      System.out.println(inp); 
      System.out.println("dONE"); 
     } 
     b.close(); 
     s.close(); 
    } 
} 

En réponse, je reçois 00 00 00 00 00 03 01 02 00 à MODSIM. Une image de la réponse à MODSIM est ici:

enter image description here

Mais en lisant, il montre un coeur et deux smileys. Données reçues:

problème

enter image description here

Répondre

0

Vous est simple: vous ne pouvez pas recevoir tout type de octets et supposer que de les envoyer à System.out.println() fera juste la bonne chose.

Un octet n'est pas un caractère ou une chaîne. C'est juste une valeur binaire; et ceux qui ne peuvent pas être imprimés "facilement".

Une chose que vous pourriez essayer: imprimez vos octets comme valeurs HEX, voyez here pour quelques idées autour de cela.