近日学习 apache mina2 发觉很难对字节数组的数据进行正确解析。
客户端代码:
String msg="testaaaa";
byte[] message= msg.getBytes();
/**
* 发送报文
* @param serviceAddress
* @param message
* @throws Exception
*/
public static void sendMessage(String serviceAddress,byte[] message) throws Exception{
String[] address = serviceAddress.split(":");
int port =0;
try {
port = Integer.valueOf(address[1]);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new Exception("服务器地址错误!");
}
if(cf==null){
getconnect(address[0],port);
} cf.awaitUninterruptibly();// 等待连接创建完成
cf.getSession().write(message);// 发送消息
cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
}
服务端:
public void messageReceived(IoSession session, Object message)
throws Exception {
//将message对象转换为字符数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(message);
byte[] str = bos.toByteArray();
oos.flush();
oos.close();
bos.close(); String msg=new String(str);
//我们已设定了服务器解析的规则是一行一行读取,这里就可以转为String:
//String str = (String)message;
//Write the received data back to remote perr
System.out.println("收到客户端发来的消息为" + " " + msg);
//将测试消息会送给客户端
//session.write(str + count);
}结果:收到客户端发来的消息为 ��
客户端代码:
String msg="testaaaa";
byte[] message= msg.getBytes();
/**
* 发送报文
* @param serviceAddress
* @param message
* @throws Exception
*/
public static void sendMessage(String serviceAddress,byte[] message) throws Exception{
String[] address = serviceAddress.split(":");
int port =0;
try {
port = Integer.valueOf(address[1]);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new Exception("服务器地址错误!");
}
if(cf==null){
getconnect(address[0],port);
} cf.awaitUninterruptibly();// 等待连接创建完成
cf.getSession().write(message);// 发送消息
cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
}
服务端:
public void messageReceived(IoSession session, Object message)
throws Exception {
//将message对象转换为字符数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(message);
byte[] str = bos.toByteArray();
oos.flush();
oos.close();
bos.close(); String msg=new String(str);
//我们已设定了服务器解析的规则是一行一行读取,这里就可以转为String:
//String str = (String)message;
//Write the received data back to remote perr
System.out.println("收到客户端发来的消息为" + " " + msg);
//将测试消息会送给客户端
//session.write(str + count);
}结果:收到客户端发来的消息为 ��
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货