java MinaClient

来源:互联网 发布:淘宝上怎么找外卖 编辑:程序博客网 时间:2024/06/14 00:45
package com.MinaClient;


import java.net.InetSocketAddress;
import java.nio.charset.Charset;


import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
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.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketConnector;
import org.apache.mina.transport.socket.nio.NioSocketConnector;


public class MyClient {


public static final int DEFAULT_CONNECT_TIMEOUT = 5;
public static final String HOST = "127.0.0.1";
public static final int PORT = 9999;
public static SocketConnector connector = null;


public MyClient() throws Exception {
init();
}


public static void init() throws Exception {
connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(DEFAULT_CONNECT_TIMEOUT);
connector.getFilterChain().addLast( "ecode", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("utf-8"))));
connector.setHandler(new MyClientHandler());
connector.getSessionConfig().setReceiveBufferSize(1024);
connector.getSessionConfig().setReadBufferSize(1024);
}


public void sentMessage(final Object msg) {
InetSocketAddress addr = new InetSocketAddress(HOST, PORT);
ConnectFuture cf = connector.connect(addr);
cf.awaitUninterruptibly();
cf.getSession().write(msg);
System.out.println("发送消息(客户端)-------------" + msg);
}


public static void main(String[] args) throws Exception {
MyClient clent = new MyClient();
for (int i = 0; i < 1; i++) {
System.err.println(i);
clent.sentMessage("dddddddddddd");
}
}


public SocketConnector getSocketConnector() {
return connector;
}


@SuppressWarnings("static-access")
public void setSocketConnector(SocketConnector socketConnector) {
this.connector = socketConnector;
}
}


class MyClientHandler extends IoHandlerAdapter {


private void releaseSession(IoSession session) throws Exception {
System.out.println("releaseSession");
if (session.isConnected()) {
session.close(true);
}
}


@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("开启会话(客户端)-------------");
}


@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("关闭会话(客户端)-------------");
}


@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
System.out.println("sessionIdle(客户端)-------------");
try {
releaseSession(session);
} catch (RuntimeIoException e) {
}
}


@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println("接收服务器传送的消息(客户端)-------------" + message);
super.messageReceived(session, message);
releaseSession(session);
}


@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
System.out.println("出现异常(客户端)-------------");
cause.printStackTrace();
releaseSession(session);
}


@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("发送消息(客户端)-------------");
super.messageSent(session, message);
}
}
0 0
原创粉丝点击