在android使用mina實現網絡訪問

mina是java基中nio的網絡訪問框架,放入android時會出現一些問題,一是SLF4J包不支持android,需要下載android版,另外是MINA 2.0.X中很多類改了包名。

一、下載jar包,添加到android項目引用

1.MINA 2.0.4 Core

下載地址:http://mina.apache.org/downloads.html

2.下載SLF4J Android

http://www.slf4j.org/android/

 

 

二、新建TestMina的android項目,命名空間爲TestMina.com,Activity 名爲TestMinaActivity,修改TestMinaActivity類源碼如下:

package TestMina.com;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
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.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class TestMinaActivity extends Activity  {
    /** Called when the activity is first created. */
    private static final int PORT = 9123;
    private static final String TAG = "MyActivity";

    @Override
    public void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.v(TAG, "bengin");

        //System.setProperty("java.net.preferIPv6Addresses", "false");

        IoAcceptor acceptor = new NioSocketAcceptor();

          acceptor.getFilterChain().addLast("logger", new LoggingFilter());

          acceptor.getFilterChain().addLast(
             "codec",
            new ProtocolCodecFilter(new TextLineCodecFactory(Charset
               .forName("UTF-8"))));

           acceptor.setHandler(new TimeServerHandler());

           acceptor.getSessionConfig().setReadBufferSize(2048);

           acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
           Log.v(TAG, "begin bind");
           try {
            acceptor.bind(new InetSocketAddress(PORT));
            Log.v(TAG, " bind end");

        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.v(TAG, e.getMessage());

        }

           
           
    }
}

 

三、在eclipse 中新建TimeServerHandler類,添加如下源碼

package TestMina.com;
import java.util.Date;

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

public class TimeServerHandler extends IoHandlerAdapter {
@Override
public void exceptionCaught(IoSession session, Throwable cause)
    throws Exception {
   cause.printStackTrace();
}

@Override
public void messageReceived(IoSession session, Object message)
    throws Exception {
   String str = message.toString();
   System.out.println("Message read:");
   System.out.println(str);

   Date date = new Date();
   session.write(date.toString());
   System.out.println("Message written...");
   session.close(true);
   
}

@Override
public void sessionIdle(IoSession session, IdleStatus status)
    throws Exception {
   System.out.println("IDLE " + session.getIdleCount(status));
}
}

 

四、

AndroidManifest.xml中加入"android.permission.INTERNET"權限,用於網絡訪問。

 

 

轉自:http://www.strongcms.net/mobile/android/2012/0513/6801.html

發佈了12 篇原創文章 · 獲贊 8 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章