0

我正在尝试将 Modrssim(Modbus 模拟器)与 java 类进行通信。我正在向 modsim 发送查询,它会对此做出响应。但是当我尝试阅读回复时,我无法获得正确的字符。

这是我的代码:

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

作为回应,我在 modsim 中得到 00 00 00 00 00 03 01 02 00。MOdsim 中的响应图像在这里:

在此处输入图像描述

但在阅读时,它显示了一颗心和两个笑脸。收到的数据:

在此处输入图像描述

4

1 回答 1

0

您的问题很简单:您不能只接收任何类型的字节并假设将它们发送到 System.out.println() 只会做正确的事情。

字节不是字符或字符串。它只是一个二进制值;那些不能“轻易”打印出来。

您可以尝试的一件事:将您的字节打印为十六进制值,请参阅此处了解有关此的一些想法。

于 2017-01-09T11:38:39.770 回答