1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java mina tcp_Mina TCP服务端客户端 示例

java mina tcp_Mina TCP服务端客户端 示例

时间:2019-06-03 22:26:06

相关推荐

java mina tcp_Mina TCP服务端客户端 示例

服务端代码:packagecom.xd.nms.example;

importjava.io.IOException;

.InetSocketAddress;

importorg.apache.mina.core.buffer.IoBuffer;

importorg.apache.mina.core.service.IoHandlerAdapter;

importorg.apache.mina.core.session.IdleStatus;

importorg.apache.mina.core.session.IoSession;

importorg.apache.mina.transport.socket.nio.NioSocketAcceptor;

importcom.xd.nms.util.ByteAndStr16;

/**

*@说明MinaTCP服务端

*@author

*@version1.0

*@since

*/

publicclassMinaTcpServerextendsIoHandlerAdapter{

publicstaticfinalintPORT=18567;

publicMinaTcpServer()throwsIOException{

NioSocketAcceptoracceptor=newNioSocketAcceptor();

acceptor.setHandler(this);

acceptor.bind(newInetSocketAddress(PORT));

System.out.println("TCP服务启动,端口:"+PORT);

}

publicstaticvoidmain(String[]args)throwsIOException{

newMinaTcpServer();

}

@Override

publicvoidmessageReceived(IoSessionsession,Objectmessage)

throwsException{

IoBufferbbuf=(IoBuffer)message;

byte[]byten=newbyte[bbuf.limit()];

bbuf.get(byten,bbuf.position(),bbuf.limit());

System.out.println("收到消息:"+ByteAndStr16.Bytes2HexString(byten));

byte[]bts=newbyte[10];

for(inti=0;i<10;i++){

bts[i]=(byte)i;

}

IoBufferbuffer=IoBuffer.allocate(10);

buffer.put(bts);

buffer.flip();

session.write(buffer);

////拿到所有的客户端Session

//Collectionsessions=session.getService().getManagedSessions().values();

////向所有客户端发送数据

//for(IoSessionsess:sessions){

//sess.write(buffer);

//}

}

@Override

publicvoidsessionClosed(IoSessionsession)throwsException{

System.out.println("会话关闭");

}

@Override

publicvoidexceptionCaught(IoSessionsession,Throwablecause)

throwsException{

System.out.println("会话异常");

super.exceptionCaught(session,cause);

}

@Override

publicvoidmessageSent(IoSessioniosession,Objectobj)throwsException{

System.out.println("服务端消息发送");

super.messageSent(iosession,obj);

}

@Override

publicvoidsessionCreated(IoSessioniosession)throwsException{

System.out.println("会话创建");

super.sessionCreated(iosession);

}

@Override

publicvoidsessionIdle(IoSessioniosession,IdleStatusidlestatus)

throwsException{

System.out.println("会话休眠");

super.sessionIdle(iosession,idlestatus);

}

@Override

publicvoidsessionOpened(IoSessioniosession)throwsException{

System.out.println("会话打开");

super.sessionOpened(iosession);

}

}

服务端建立端口监听后,收到消息后进入messageReceived()方法,示例处理是打印该消息,然后组装了一个0-9的数据返回回去

注意,即使使用的是Mina,仍需做分包、粘包,等处理,例如有时一条数据不是一次发过来的

客户端程序:packagecom.xd.nms.example;

.InetSocketAddress;

importorg.apache.mina.core.buffer.IoBuffer;

importorg.apache.mina.core.future.ConnectFuture;

importorg.apache.mina.core.service.IoConnector;

importorg.apache.mina.core.service.IoHandlerAdapter;

importorg.apache.mina.core.session.IdleStatus;

importorg.apache.mina.core.session.IoSession;

importorg.apache.mina.transport.socket.nio.NioSocketConnector;

importcom.xd.nms.util.ByteAndStr16;

/**

*@说明MinaTCP客户端

*@author

*@version1.0

*@since

*/

publicclassMinaTcpClientextendsIoHandlerAdapter{

privateIoConnectorconnector;

privatestaticIoSessionsession;

publicMinaTcpClient(){

connector=newNioSocketConnector();

connector.setHandler(this);

ConnectFutureconnFuture=connector.connect(newInetSocketAddress("localhost",MinaTcpServer.PORT));

connFuture.awaitUninterruptibly();

session=connFuture.getSession();

System.out.println("TCP客户端启动");

}

publicstaticvoidmain(String[]args)throwsException{

MinaTcpClientclient=newMinaTcpClient();

for(intj=0;j<2;j++){//发送两遍

byte[]bts=newbyte[20];

for(inti=0;i

bts[i]=(byte)i;

}

IoBufferbuffer=IoBuffer.allocate(20);

//自动扩容

buffer.setAutoExpand(true);

//自动收缩

buffer.setAutoShrink(true);

buffer.put(bts);

buffer.flip();

session.write(buffer);

Thread.sleep(2000);

}

//关闭会话,待所有线程处理结束后

client.connector.dispose(true);

}

@Override

publicvoidmessageReceived(IoSessioniosession,Objectmessage)

throwsException{

IoBufferbbuf=(IoBuffer)message;

byte[]byten=newbyte[bbuf.limit()];

bbuf.get(byten,bbuf.position(),bbuf.limit());

System.out.println("客户端收到消息"+ByteAndStr16.Bytes2HexString(byten));

}

@Override

publicvoidexceptionCaught(IoSessionsession,Throwablecause)

throwsException{

System.out.println("客户端异常");

super.exceptionCaught(session,cause);

}

@Override

publicvoidmessageSent(IoSessioniosession,Objectobj)throwsException{

System.out.println("客户端消息发送");

super.messageSent(iosession,obj);

}

@Override

publicvoidsessionClosed(IoSessioniosession)throwsException{

System.out.println("客户端会话关闭");

super.sessionClosed(iosession);

}

@Override

publicvoidsessionCreated(IoSessioniosession)throwsException{

System.out.println("客户端会话创建");

super.sessionCreated(iosession);

}

@Override

publicvoidsessionIdle(IoSessioniosession,IdleStatusidlestatus)

throwsException{

System.out.println("客户端会话休眠");

super.sessionIdle(iosession,idlestatus);

}

@Override

publicvoidsessionOpened(IoSessioniosession)throwsException{

System.out.println("客户端会话打开");

super.sessionOpened(iosession);

}

}

向服务端发送两次0-19的数据,收到消息后同样进入messageReceived()方法,处理同样是打印显示!

打印结果:TCP服务启动,端口:18567

会话创建

会话打开

收到消息:000102030405060708090A0B0C0D0E0F10111213

服务端消息发送

收到消息:000102030405060708090A0B0C0D0E0F10111213

服务端消息发送

会话关闭

客户端打印:客户端会话创建

客户端会话打开

TCP客户端启动

客户端消息发送

客户端收到消息00010203040506070809

客户端消息发送

客户端收到消息00010203040506070809

客户端会话关闭

示例仅供参考

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。