MINA的UDP协议demo

最近要写一个监控程序,于是想到了用下MINA,网上找了些例子感觉并不适用,写了一个小例子测试了一下,很简单。数据需要主要通过xml发送,所以这个例子实现了文本数据传输。

 

服务端代码
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.Date;

import org.apache.log4j.Logger;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.DatagramSessionConfig;
import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;

public class ServerHandler extends IoHandlerAdapter {

private static Logger logger = Logger.getLogger(ServerHandler.class);

public ServerHandler() throws IOException {
NioDatagramAcceptor acceptor
= new NioDatagramAcceptor();
acceptor.setHandler(
this);
DefaultIoFilterChainBuilder chain
= acceptor.getFilterChain();
chain.addLast(
"logger", new LoggingFilter());
chain.addLast(
"codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.NUL, LineDelimiter.NUL)));
DatagramSessionConfig dcfg
= acceptor.getSessionConfig();
dcfg.setReuseAddress(
true);
acceptor.bind(
new InetSocketAddress(1234));
}

public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println(message.toString()
+ ":" + new Date());
}

public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
logger.error(
"MINA发生异常:", cause);
}

public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
}

public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
super.sessionIdle(session, status);
}

public static void main(String[] args) throws IOException {
new ServerHandler();
}
}

 

客户端代码
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.log4j.Logger;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
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.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.DatagramConnector;
import org.apache.mina.transport.socket.nio.NioDatagramConnector;

public class Client extends IoHandlerAdapter {
private static Logger logger = Logger.getLogger(Client.class);

DatagramConnector connector;

IoSession session;

public Client() {
connector
= new NioDatagramConnector();
connector.setHandler(
this);
DefaultIoFilterChainBuilder chain
= connector.getFilterChain();
chain.addLast(
"logger", new LoggingFilter());
chain.addLast(
"codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.NUL, LineDelimiter.NUL)));
IoFuture connFuture
= connector.connect(new InetSocketAddress(
"127.0.0.1", 1234));
connFuture.addListener(
new IoFutureListener() {
public void operationComplete(IoFuture future) {
ConnectFuture connFuture
= (ConnectFuture) future;
if (connFuture.isConnected()) {
session
= future.getSession();
try {
sendData();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
else {
logger.error(
"Not connected...exiting");
}
}
});
}

private void sendData() throws InterruptedException {
session.write(
"测试数据发送!");
}

public static void main(String[] args) {
new Client();
}
}

 

 

 

 

参考:

http://mina.apache.org/udp-tutorial.html

http://hi.baidu.com/yhzhw2121/blog/item/ba7b76552b30045d564e00e2.html

posted on 2010-06-10 19:36  知之  阅读(4894)  评论(0)    收藏  举报

导航