有关apache mina框架的编码问题

首先声明:mina框架收发都是通过bytebuffer来传值的


客户端代码:

public class SocketCli {

public static void main(String[] arg) {
try {
SocketChannel mSocketChannel = SocketChannel
.open(new InetSocketAddress("192.168.1.30", 8080));
if (mSocketChannel != null) {
mSocketChannel.socket().setTcpNoDelay(false);
mSocketChannel.socket().setKeepAlive(true);
mSocketChannel.socket().setSoTimeout(60 * 1000);
mSocketChannel.configureBlocking(false);
Selector mSelector = Selector.open();
if (mSelector != null) {
mSocketChannel.register(mSelector, SelectionKey.OP_READ);
}

                                 //用SocketChannel 只能传入bytebuffer
JsonUtls ju = new JsonUtls();
String data = ju.setHeartJsonData();
ByteBuffer bytebuffer = ByteBuffer.wrap(data.getBytes("UTF-8"));
mSocketChannel.write(bytebuffer);
bytebuffer.flip();
bytebuffer.clear();


while (mSelector.select() > 0) {
System.out.println("SocketInputStream select > 0");
Iterator<SelectionKey> iterator = mSelector.selectedKeys()
.iterator();
while (iterator.hasNext()) {
System.out.println("SocketInputStream hasNext > 0");
SelectionKey selectionkey = iterator.next();
if (selectionkey.isReadable()) {
SocketChannel socketChannel = (SocketChannel) selectionkey
.channel();

                                                        //从服务器端传过来的就是bytebuffer
ByteBuffer bytebuffer1 = ByteBuffer.allocate(1024);
socketChannel.read(bytebuffer1);
bytebuffer.flip();
String resultStr = new String(bytebuffer1.array(),
"UTF-8");
System.out.println("返回值>>>>>>>" + resultStr);
bytebuffer.clear();
bytebuffer = null;


// 为下一次读取做准备
selectionkey.interestOps(SelectionKey.OP_READ);
iterator.remove();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


服务器代码:

public class MinaServer {
public static void main(String[] args) {


IoAcceptor acceptor = new NioSocketAcceptor();


acceptor.getSessionConfig().setReadBufferSize(2048);// 缓存大小
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);// 若10秒无操作进入空闲状态

                //一定不要加入编码过滤
// acceptor.getFilterChain().addLast(
// "codec",
// new ProtocolCodecFilter(new TextLineCodecFactory(
// CharsetUtil.UTF_8)));


// acceptor.getFilterChain().addLast("codec",
// new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));


acceptor.setHandler(new IoHandlerAdapter() {


@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
session.close(true);
}


@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println("messageReceived start");

                                //重点   将客户端传过来的值转为bytebuffer
IoBuffer bufferRe = (IoBuffer) message;
String resultStr = new String(bufferRe.array(), "UTF-8");
System.out.println(resultStr.toString());

                                //向客户端响应的值也得是bytebuffer
IoBuffer buffer = IoBuffer.wrap("Hello,i'm server"
.getBytes("UTF-8"));
session.write(buffer);
}


@Override
public void messageSent(IoSession session, Object message)
throws Exception {
System.out.println("messageSent start");
}


});


try {
acceptor.bind(new InetSocketAddress("192.168.1.30", 8080));
} catch (IOException e) {
e.printStackTrace();
}


}
}


已经过测试,服务器可接收到信息,客户端可接收到响应的信息,编码没有问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值