mina 简单实例(传送文本的)
来源:互联网 发布:php短信接口代码 编辑:程序博客网 时间:2024/04/30 17:09
SeverTest.java
/**
* Copyright TopScientific Systems Ltd. 2005-2007
* All right reserved.
*/
package org.apache.mina.mytest;
import java.net.InetSocketAddress;
import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoAcceptorConfig;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
/**
* @author zkchen
*
*/
public class SeverTest {
private static final int PORT = 1234;
public static void main(String[] args) throws Exception {
IoAcceptor acceptor = new SocketAcceptor();
IoAcceptorConfig config = new SocketAcceptorConfig();
DefaultIoFilterChainBuilder chain = config.getFilterChain();
// Add SSL filter if SSL is enabled.
chain.addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory()));
addLogger(chain);
// Bind
acceptor.bind(new InetSocketAddress(PORT), new EchoProtocolHandler(
), config);
System.out.println("Listening on port " + PORT);
}
private static void addLogger(DefaultIoFilterChainBuilder chain)
throws Exception {
chain.addLast("logger", new LoggingFilter());
System.out.println("Logging ON");
}
}
EchoProtocolHandler.java
package org.apache.mina.mytest;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Random;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.TransportType;
import org.apache.mina.filter.SSLFilter;
import org.apache.mina.transport.socket.nio.SocketSessionConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EchoProtocolHandler extends IoHandlerAdapter {
private static final Logger log = LoggerFactory
.getLogger(EchoProtocolHandler.class);
private Hashtable<IoSession, String> clients = new Hashtable<IoSession, String>();
private Random random = new Random();;
private static int user = 0;
public EchoProtocolHandler() {
super();
}
public void sessionCreated(IoSession session) {
if (session.getTransportType() == TransportType.SOCKET) {
((SocketSessionConfig) session.getConfig())
.setReceiveBufferSize(2048);
}
session.setIdleTime(IdleStatus.BOTH_IDLE, 10);
// We're going to use SSL negotiation notification.
session.setAttribute(SSLFilter.USE_NOTIFICATION);
// session.write("create a session");
}
public void sessionOpened(IoSession session) {
// UserInfo userInfo = new UserInfo();
// userInfo.isValid = false;
// session.setAttachment(userInfo);
String userName = "client" + (++user);
session.write("session open");
clients.put(session, userName);
session.write("LOGIN OK");
broadcast("The user " + user + " has joined the chat session. "
+ this.getNumberOfUsers());
log.info("a new client connected,but didn't join yet!"); // 通话session
// 打开以后促发的事件处理
this.sendMessage(session);
}
public void sessionClosed(IoSession session) {
log.info("a client closed,and now count is : "
+ this.getNumberOfUsers()); // 通话session
String user = clients.get(session);
clients.remove(session);
broadcast("The user " + user + " has left the chat session.");
// 关闭以后促发的事件处理
}
public void sessionIdle(IoSession session, IdleStatus status) {
log.info("*** IDLE #" + session.getIdleCount(IdleStatus.BOTH_IDLE)
+ " ***");
// session.write("sessionidle");
}
public void exceptionCaught(IoSession session, Throwable cause) {
cause.printStackTrace();
session.close();
}
public void messageReceived(IoSession session, Object message)
throws Exception {
if (!(message instanceof ByteBuffer)) {
return;
}
ByteBuffer rb = (ByteBuffer) message;
// Write the received data back to remote peer
ByteBuffer wb = ByteBuffer.allocate(rb.remaining());
wb.put(rb);
wb.flip();
}
public void messageSent(IoSession session, Object message) {
log.info(">>>>>this is server ,sent the message to client: ");
log.info("messageSent succful");
// 发送成功以后会调用这里的函数
// message 为messageReceived 函数中 write 发送的消息
// 绝对不要在这里用write 不然要死循环的
}
public void sendMessage(IoSession session) {
int num;
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
num = random.nextInt();
Iterator iter = clients.keySet().iterator();
while (iter.hasNext()) {
IoSession s = (IoSession) iter.next();
if (s.isConnected()) {
s.write("BROADCAST OK " + num);
}
}
}
}
public void broadcast(String message) {
//
// Iterator it=
// while(it.hasNext())
// { System.out.println(clients.get(it.next()));}
Iterator iter = clients.keySet().iterator();
while (iter.hasNext()) {
IoSession s = (IoSession) iter.next();
if (s.isConnected()) {
s.write("BROADCAST OK " + message);
}
}
}
public int getNumberOfUsers() {
return clients.size();
}
}
ClientTest.java
/**
* Copyright TopScientific Systems Ltd. 2005-2007
* All right reserved.
*/
package org.apache.mina.mytest;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.IoConnector;
import org.apache.mina.transport.socket.nio.SocketConnector;
import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
/**
* @author zkchen
*
*/
public class ClientTest {
//private IoSession session;
public ClientTest() {
IoConnector ioConnector = new SocketConnector();
SocketAddress address = new InetSocketAddress("localhost",1234);
ConnectFuture future1 = ioConnector.connect(address ,new ClientHandler() , new SocketConnectorConfig());
if( ! future1.isConnected() )
{
System.out.println("full is connected");
}
future1.join();
if( ! future1.isConnected() )
{
System.out.println("hsa connected");
}
System.out.println(future1);
System.out.println(future1.getSession());
}
public static void main(String [] args){
new ClientTest();
}
}
ClientHandler.java
package org.apache.mina.mytest;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoFilter;
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
/* *
* @author The Apache Directory Project (mina-dev@directory.apache.org)
* @version $Rev$, $Date$
*/
public class ClientHandler extends IoHandlerAdapter {
private static IoFilter LOGGING_FILTER = new LoggingFilter();
private static IoFilter CODEC_FILTER = new ProtocolCodecFilter(
new TextLineCodecFactory());
public void sessionCreated(IoSession session) throws Exception {
session.getFilterChain().addLast("codec", CODEC_FILTER);
session.getFilterChain().addLast("logger", LOGGING_FILTER);
}
public void sessionOpened(IoSession session) throws Exception {
session.write("client open");
}
public void messageReceived(IoSession session, Object message)
throws Exception {
if (!(message instanceof ByteBuffer)) {
return;
}
ByteBuffer rb = (ByteBuffer) message;
// Write the received data back to remote peer
ByteBuffer wb = ByteBuffer.allocate(rb.remaining());
wb.put(rb);
System.out.println(wb.toString());
wb.flip();
}
public void messageSent(IoSession session, Object message) {
// session.write("hello");
// 发送成功以后会调用这里的函数
// message 为messageReceived 函数中 write 发送的消息
// 绝对不要在这里用write 不然要死循环的
}
public void sessionClosed(IoSession session) throws Exception {
}
}
- mina 简单实例(传送文本的)
- Apache的Mina简单实例
- Apache的Mina简单实例
- 简单的servlet实例,实现登录信息传送
- mina的简单例子
- MINA 传送文件 文件名
- MINA 传送文件 文件名 .
- Apache MINA客户端服务器简单实例
- 文本数据压缩传送的几个想法
- Mina框架的简单例子
- mina实例
- 首次使用Mina(使用Mina建立简单的服务器)
- 1.mina服务初体验-->.<简单的搭建个mina
- Android文本自动提示框的简单应用实例
- Android文本自动提示框的简单应用实例
- QT编程实例1--简单的文本编辑器(上)
- QT编程实例1--简单的文本编辑器(中)
- QT编程实例1--简单的文本编辑器(下)
- 个人收藏的50部经典UMD电影的ISO镜像文件
- 自己写的HibernateTemplate,简单版的
- Mina(Multipurpose Infrastructure for Network Applications)完全文档
- 利用SEO长尾理论来赚钱!
- Linux那些事儿 之 戏说USB(22)设备的生命线(一)
- mina 简单实例(传送文本的)
- DB2客户端连接服务器的配置问题
- 关于判断MDI窗体是否存在,存在则显示,不存在则创建
- MINA Beginning (转载)
- 第一次网上买书 就碰到 当当这么虚情假意的!~
- 多年前的档案找到了
- 快速排序的C#实现以及,算法导论上之后一个习题的思考
- 关于友元
- [转]笔记本上装Vmware巨慢无比的原因探索