//MAVEN
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
<type>jar.sha256</type>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.rxtx</groupId>
<artifactId>rxtx</artifactId>
<version>2.1.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
MINASERVER
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
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.IOException;
import java.net.InetSocketAddress;
public class Mina {//服务器代码
public static void main(String[] args) {
//创建一个非阻塞的server端socket NIO
SocketAcceptor acceptor=new NioSocketAcceptor();
//创造一个过滤垫
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//添加过滤器一行一行的读取数据(/r/n)
chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
//设定服务端的消息处理器
acceptor.setHandler(new MinaServerHandler());
int port=9999;//服务器的端口号、
try {
//绑定端口服务器(不会堵塞,立即返回)
acceptor.bind(new InetSocketAddress(port));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("MIna Server running listener on :"+port);
}
}
MINASERVERHANDLER
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* 服务器的消息处理器
*/
public class MinaServerHandler extends IoHandlerAdapter {
//会话打开
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
System.out.println("welcome"+session.getRemoteAddress());//获取远程的地址
}
//会话关闭
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
System.out.println("client close");
}
//接受消息的方法
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
super.messageReceived(session, message);
String msg = (String) message;
System.out.println("收到客户端发来的消息"+msg);
//向客户端发生消息
session.write("echo:"+msg);
}
}
package mina_;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
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 MinaClient {
public static void main(String[] args) {
//创造接收数据的过滤器
NioSocketConnector connector = new NioSocketConnector();
//添加过滤垫
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
//设定这个过滤器一行一行读取数据
// chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
//设定过滤器以对象为单位
chain.addLast("objectFilter",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
//设定服务器端的消息处理器:一个SampleMinaServerHandler对象
connector.setHandler(new SampleMinaClientHandler());
//失效时间
connector.setConnectTimeoutMillis(10000);
//连接到服务器
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9999));
cf.awaitUninterruptibly();
Scanner scanner = new Scanner(System.in);
while (true) {
//string的方式
// System.out.println("请输入消息");
// String info = scanner.nextLine();
// //发送消息
// cf.getSession().write(info);
//以对象方式传输
Message msg = new Message();
System.out.println("form:");
msg.setFrom(scanner.nextLine());
System.out.println("to:");
msg.setTo(scanner.nextLine());
System.out.println("info");
msg.setInfo(scanner.nextLine());
msg.setType("send");
//发送消息
cf.getSession().write(msg);
}
//等待服务器关闭结束长连接
// cf.getSession().getCloseFuture().awaitUninterruptibly();
//connector.dispose();
}
}
消息处理器
package mina_;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class SampleMinaClientHandler extends IoHandlerAdapter {
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
System.out.println("sessionOpened ");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
System.out.println("sessionClosed");
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
super.messageReceived(session, message);
// String message1 = (String) message;
// System.out.println(message1);
Message msg=(Message)message;
session.write(msg);
}
}
改过滤器改消息处理器