Skip to content

mina server/client example To enhance #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: trunk
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package org.apache.mina.examples.service;

import java.util.Date;

import org.apache.mina.api.IdleStatus;
import org.apache.mina.api.IoHandler;
import org.apache.mina.api.IoService;
import org.apache.mina.api.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ClientHandler implements IoHandler {

static final private Logger LOG = LoggerFactory.getLogger(ClientHandler.class);

@Override
public void sessionOpened(IoSession session) {
LOG.info("session opened {" + session + "}");
}

@Override
public void sessionClosed(IoSession session) {
LOG.info("client :" + session.getRemoteAddress().toString() + " close connection");
}

@Override
public void sessionIdle(IoSession session, IdleStatus status) {
// TODO Auto-generated method stub

}

@Override
public void messageReceived(IoSession session, Object message) {
LOG.info("client get message => " + message.toString());
System.out.println("client get message => " + message.toString());
}

@Override
public void messageSent(IoSession session, Object message) {
LOG.info("client send message: " + message.toString());
System.out.println("client send message: " + message.toString());
}

@Override
public void serviceActivated(IoService service) {
// TODO Auto-generated method stub

}

@Override
public void serviceInactivated(IoService service) {
// TODO Auto-generated method stub

}

@Override
public void exceptionCaught(IoSession session, Exception cause) {
// TODO Auto-generated method stub

}

@Override
public void handshakeStarted(IoSession abstractIoSession) {
// TODO Auto-generated method stub

}

@Override
public void handshakeCompleted(IoSession session) {
// TODO Auto-generated method stub

}

@Override
public void secureClosed(IoSession session) {
// TODO Auto-generated method stub

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.apache.mina.examples.service;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.concurrent.ExecutionException;

import org.apache.mina.api.IoFuture;
import org.apache.mina.api.IoSession;
import org.apache.mina.codec.delimited.serialization.JavaNativeMessageEncoder;
import org.apache.mina.transport.nio.NioTcpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClient {

static final private Logger LOG = LoggerFactory.getLogger(MyClient.class);

public static void main(String[] args) {

LOG.info("starting echo client");
final NioTcpClient client = new NioTcpClient();
client.setIoHandler(new ClientHandler());

try {

IoFuture<IoSession> future = client.connect(new InetSocketAddress("localhost", 9999));

try {
IoSession session = future.get();
LOG.info("session connected : {" + session + "}");

HashMap<String, String> m = new HashMap<String, String>();
m.put("1", "1");

// encode
JavaNativeMessageEncoder<HashMap> in = new JavaNativeMessageEncoder<HashMap>();
ByteBuffer encode = in.encode(m);
session.write(encode);

} catch (ExecutionException e) {
LOG.error("cannot connect : ", e);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.apache.mina.examples.service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.SocketAddress;

import org.apache.mina.api.IdleStatus;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.nio.NioTcpServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class MyServer {

private static final Logger LOG = LoggerFactory.getLogger(MyServer.class);

public static void main(String[] args) {
LOG.info("start server...");
final NioTcpServer acceptor = new NioTcpServer();
acceptor.setFilters(new LoggingFilter("LoggingFilter1"));
acceptor.setIoHandler(new ServerHandler());

try {

final SocketAddress address = new InetSocketAddress(9999);
acceptor.bind(address);
new BufferedReader(new InputStreamReader(System.in)).readLine();
acceptor.unbind();
} catch (final IOException e) {
LOG.error("Interrupted exception", e);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package org.apache.mina.examples.service;

import java.nio.ByteBuffer;
import java.util.HashMap;

import org.apache.mina.api.IdleStatus;
import org.apache.mina.api.IoHandler;
import org.apache.mina.api.IoService;
import org.apache.mina.api.IoSession;
import org.apache.mina.codec.IoBuffer;
import org.apache.mina.codec.delimited.serialization.JavaNativeMessageDecoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ServerHandler implements IoHandler {

private static final Logger LOG = LoggerFactory.getLogger(ServerHandler.class);

@Override
public void sessionOpened(IoSession session) {
LOG.info("server session opened {" + session + "}");
}

@Override
public void sessionClosed(IoSession session) {
LOG.info("IP:" + session.getRemoteAddress().toString() + " close");
}

@Override
public void sessionIdle(IoSession session, IdleStatus status) {

}

@Override
public void messageReceived(IoSession session, Object message) {
if (message instanceof ByteBuffer) {
try {

JavaNativeMessageDecoder<HashMap> decoder = new JavaNativeMessageDecoder<HashMap>();
IoBuffer ioBuff = IoBuffer.wrap((ByteBuffer) message);
HashMap map = decoder.decode(ioBuff);
LOG.info("server decode value => " + map);
System.out.println("server decode => " + map);
} catch (Exception e) {
e.printStackTrace();
}
}
}

@Override
public void messageSent(IoSession session, Object message) {
LOG.info("send message:" + message.toString());
System.out.println("server send message:" + message.toString());
}

@Override
public void serviceActivated(IoService service) {

}

@Override
public void serviceInactivated(IoService service) {

}

@Override
public void exceptionCaught(IoSession session, Exception cause) {

}

@Override
public void handshakeStarted(IoSession abstractIoSession) {

}

@Override
public void handshakeCompleted(IoSession session) {

}

@Override
public void secureClosed(IoSession session) {

}

}