java web----MINA框架使用

前期准备

1、下载

http://mina.apache.org/

2、将依赖包添加到工程目录下(在工程目录下创建libs(directory目录))

3、将 slf4j-api-1.7.26.jar 和 mina-core-2.0.21.jar 依赖包添加到libs目录下

4、给这两个文件和工程绑定关系,方法:选中两个文件,右击,选择 Add as Library

代码实现

 服务端

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import java.io.*;
import java.net.InetSocketAddress; public class Server{
public static void main(String[] args) {
//创建一个非堵塞的Server(Socker),[NIO模式]
SocketAcceptor acceptor = new NioSocketAcceptor();
//创建一个过滤器对象
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定一个过滤器,一行一行的读取数据(/r/n)
//chain.addLast("myChain",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));//表示传数据的数据是一个对象;
chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
//设置服务器的消息处理器
acceptor.setHandler(new MinaServerHandle());
int port = 8080; //服务器的端口号
try {
//绑定端口,并且启动服务器,立刻返回,不会堵塞
acceptor.bind(new InetSocketAddress(port)); } catch (IOException e) {
e.printStackTrace();
}
System.out.println("MINA服务器已经开启,端口号:"+port);
}
} //服务器端的消息处理器
class MinaServerHandle extends IoHandlerAdapter {
//会话开始
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
System.out.println(session.getRemoteAddress()+"已连接");//获取客户端连接的ip地址
}
//会话结束
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("会话结束");
} //接受消息
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
super.messageReceived(session, message);
System.out.println(message); //接受消息
session.write("hellow");
}
}

  

客户端1

1.可以使用window自带的telnet工具和服务器连接,并进行通信

首先打开Telnet,在控制面板中,打开程序和功能,在打开 (打开或关闭windows 功能),选中Telnet 客户端 ,确定

测试:控制台上输入  telnet localhost(服务器的ip地址)   8080(服务器的端口) ,即可

客户端2

2.自己写客户端程序

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector; import java.net.InetSocketAddress;
import java.util.Scanner; public class client {
public static void main(String[] args) {
NioSocketConnector conn = new NioSocketConnector();
DefaultIoFilterChainBuilder chain = conn.getFilterChain();
chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
conn.setHandler(new MinaClientHandle());
conn.setConnectTimeoutCheckInterval(3000); //连接服务器
ConnectFuture cf = conn.connect(new InetSocketAddress("localhost", 8080));
cf.awaitUninterruptibly(); //等待连接成功;
Scanner input = new Scanner(System.in);
while (true){
System.out.println("输入消息");
String msg = input.nextLine();
cf.getSession().write(msg);
}
//等待服务器关闭连接
//cf.getSession().getCloseFuture().awaitUninterruptibly();
//conn.dispose();
}
}
class MinaClientHandle extends IoHandlerAdapter {
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
System.out.println("已连接");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
System.out.println("已关闭");
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
super.messageReceived(session, message);
System.out.println("服务器返回消息:"+message);
}
}

  

上一篇:HTML5 自定义属性 data-*介绍


下一篇:Jquery几秒自动跳转