我做了一个socket通信的小程序,客服端发送的是一些十六进制的数据(1K的大小),为什么我这边接收过来是一些乱码呢
try {
ServerSocket server=new ServerSocket(12345);
System.out.println("正在监听12345端口......");
//保持阻塞,等待连接
Socket s=server.accept();
System.out.println("连接OK");
BufferedInputStream bis=new BufferedInputStream(s.getInputStream()); //向socket 写入数据
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
//接收从控制台接收的信息
InputStreamReader isr2=new InputStreamReader(System.in);
BufferedReader br2=new BufferedReader(isr2);
System.out.println("请输入命令:");
String info=br2.readLine();
pw.print(info);
pw.flush();
System.out.println("发出命令"+info);
while(true)
{
//每次接收的数据
byte[] data=new byte[1024];
int len=bis.read(data);
String data1=new String(Arrays.copyOf(data,len));
System.out.println(data1);//就是这儿输出的data1是乱码
}
请问要怎么修改,才能输出的是十六进制的数
try {
ServerSocket server=new ServerSocket(12345);
System.out.println("正在监听12345端口......");
//保持阻塞,等待连接
Socket s=server.accept();
System.out.println("连接OK");
BufferedInputStream bis=new BufferedInputStream(s.getInputStream()); //向socket 写入数据
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
//接收从控制台接收的信息
InputStreamReader isr2=new InputStreamReader(System.in);
BufferedReader br2=new BufferedReader(isr2);
System.out.println("请输入命令:");
String info=br2.readLine();
pw.print(info);
pw.flush();
System.out.println("发出命令"+info);
while(true)
{
//每次接收的数据
byte[] data=new byte[1024];
int len=bis.read(data);
String data1=new String(Arrays.copyOf(data,len));
System.out.println(data1);//就是这儿输出的data1是乱码
}
请问要怎么修改,才能输出的是十六进制的数
数据对应的十六进制字符串,还是直接就是字节数组?
前者的话,你当前的写法应该不会乱码
后者的话,需要一个专门的方法把字节数组转为十六进制字符串,提供一个方法: private static final String HEX_CODE = "0123456789ABCDEF"; public static String byteArrayToHexString(byte[] bs) {
int _byteLen = bs.length;
StringBuilder _result = new StringBuilder(_byteLen * 2);
for (int i = 0; i < _byteLen; i++) {
int n = bs[i] & 0xFF;
_result.append(HEX_CODE.charAt(n >> 4));
_result.append(HEX_CODE.charAt(n & 0x0F));
}
return String.valueOf(_result);
}然后修改如下:while (true) {
// 每次接收的数据
byte[] data = new byte[1024];
int len = bis.read(data);
String data1 = byteArrayToHexString(Arrays.copyOf(data, len));
System.out.println(data1);// 就是这儿输出的data1是乱码
}