使用Mina傳輸Java對象

openkk 12年前發布 | 51K 次閱讀 網絡工具包 Apache MINA

This is apache-mina-2.0.4, please drink code....

 

下面是所要傳輸的實體類UserInfo.java

package com.mina.model;

import java.io.Serializable;

/**

  • @see Mina傳輸的實體類,要求其實現Serializable接口 */ @SuppressWarnings("serial") public class UserInfo implements Serializable{ private String name;

    public UserInfo(String name){

     this.name = name;
    

    }

    public String getName() {

     return name;
    

    } }</pre>
    下面是Mina編寫的服務端主類MyServer.java</strong></span>

    package com.mina.server;

import java.io.IOException; import java.net.InetSocketAddress;

import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MyServer { public static void main(String[] args) throws IOException { int bindPort = 9876;

    IoAcceptor acceptor = new NioSocketAcceptor();

    acceptor.getSessionConfig().setReadBufferSize(2048);
    acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

    //設定服務器解析消息的規則是以Object對象為單位進行傳輸,注意此時該對象需實現Serializable接口
    acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

    acceptor.setHandler(new ServerHandler());

    acceptor.bind(new InetSocketAddress(bindPort));

    System.out.println("MinaServer is startup, and it`s listing on := " + bindPort);
}

}</pre>
下面是服務端的消息處理器ServerHandler.java</strong></span>

package com.mina.server;

import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession;

import com.mina.model.UserInfo;

public class ServerHandler extends IoHandlerAdapter { @Override public void messageReceived(IoSession session, Object message) throws Exception { UserInfo ui = (UserInfo)message; //我們已設定了服務器解析消息的規則是以UserInfo對象為單位進行傳輸 System.out.println("收到客戶機發來的用戶名:" + ui.getName()); session.write(new UserInfo(ui.getName() + "==>>是個神秘的人")); }

@Override
public void sessionOpened(IoSession session) throws Exception{
    System.out.println("InComing Client:" + session.getRemoteAddress());
}

}</pre>
接下來是Mina編寫的客戶端主類MyClient.java</strong></span>

package com.mina.client;

import java.net.InetSocketAddress;

import org.apache.mina.core.service.IoConnector; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector;

import com.mina.model.UserInfo;

public class MyClient { public static void main(String[] args) { IoConnector connector = new NioSocketConnector();

    connector.setConnectTimeoutMillis(30000);

    connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

    connector.setHandler(new ClientHandler(new UserInfo("張起靈")));

    connector.connect(new InetSocketAddress("127.0.0.1", 9876));
}

}</pre>
最后是客戶端的消息處理器ClientHandler.java</strong></span>

package com.mina.client;

import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession;

import com.mina.model.UserInfo;

public class ClientHandler extends IoHandlerAdapter { private final UserInfo ui;

public ClientHandler(UserInfo ui){
    this.ui = ui;
}

@Override
public void sessionOpened(IoSession session) throws Exception {
    session.write(ui);
}

@Override
public void messageReceived(IoSession session, Object message) throws Exception {
    UserInfo ui = (UserInfo)message;
    System.out.println("收到服務機發來的用戶名:" + ui.getName());
}

@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
    System.out.println("與" + session.getRemoteAddress() + "通信過程中出現錯誤:[" + cause.getMessage() + "]..連接即將關閉....");
    session.close(false);
    session.getService().dispose();
}

}</pre>轉自:http://blog.csdn.net/jadyer/article/details/7662878

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!