我试图与Modrssim进行沟通 (Modbus Simulator)带有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中的响应图像在这里:
但在阅读时,它显示出一颗心和两个表情符号。 收到的数据:
答案 0 :(得分:0)
你的问题很简单:你不能只接收任何类型的字节,并假设将它们发送到System.out.println()只会做正确的事情。
字节不是字符或字符串。它只是一个二进制值;那些不能“轻易”打印出来。
您可以尝试的一件事:将您的字节打印为HEX值,有关这方面的一些想法,请参阅here。