我做了一个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是乱码
}
请问要怎么修改,才能输出的是十六进制的数
解决方案 »
- equals的问题!
- 请教各位怎样用使用拦截器做网站模块的开启和关闭。
- 关于参数调用的一个简单问题 请大家帮帮忙,很紧急!
- 最好的java反编译工具是什么?
- 请问怎样对TextArea中的文字更改字体?
- ::::::怎样在俄eclipse工具栏中添加"重建工程"的按钮?:::::
- ****************请大家看看,菜鸟问题,希望有朋友帮忙解答.*************
- 有能详细讲解一下EventListenerList的吗?一定给分,谢谢
- Swing如何通过同一个按钮向任意不同文本框输入值?
- 字符串统计
- Java编程思想-11章 · 练习29
- 关于如何将paint方法中生成的图片转换成jpg格式的问题
数据对应的十六进制字符串,还是直接就是字节数组?
前者的话,你当前的写法应该不会乱码
后者的话,需要一个专门的方法把字节数组转为十六进制字符串,提供一个方法: 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是乱码
}