0

I'm trying to communicate Modrssim (Modbus Simulator) with a java class. I'm sending a query to modsim and it responds to that. But when I try to read the response I can't get the proper character.

Here is my 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();
    }
}

As a response I'm getting 00 00 00 00 00 03 01 02 00 in modsim. An image of the response in MOdsim is here:

enter image description here

But while reading it, it shows a heart and two smilies. Data received:

enter image description here

4

1 に答える 1

0

あなたの問題は単純です: あらゆる種類のバイトを受け取るだけではなく、それらを System.out.println() に送信するだけで正しいことを行うと想定することはできません。

バイトは文字でも文字列でもありません。これは単なるバイナリ値です。それらは「簡単に」印刷することはできません。

試すことができることの1つは、バイトをHEX値として出力することです。これに関するいくつかのアイデアについては、こちらを参照してください。

于 2017-01-09T11:38:39.770 に答える