Mina是Apache的一個基於NioSocket的框架html
下載地址:Mina , slf4j(Android)java
載入libs:
mina-core-2.0.9.jar
slf4j-api-1.7.7.jarmysql
載入libs:
android-support-v4.jar
mina-core-2.0.7.jar
slf4j-android-1.6.1-RC1.jarandroid
MinaServer.javasql
public class MinaServer { public static void main(String[]args){ try{ NioSocketAcceptor acceptor = new NioSocketAcceptor(); acceptor.setHandler(new ServerHandler()); //處理 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));//過濾消息 acceptor.bind(new InetSocketAddress(9900)); //指定port }catch (Exception e){ e.printStackTrace(); } } }
ServerHandler.java (處理器)apache
public class ServerHandler extends IoHandlerAdapter { MySQL mysql; //異常 @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { } //接收信息 @Override public void messageReceived(IoSession session, Object message) throws Exception { String msg = (String)message; System.out.println(msg); } //發送信息 @Override public void messageSent(IoSession session, Object message) throws Exception { super.messageSent(session, message); } @Override public void sessionClosed(IoSession session) throws Exception { super.sessionClosed(session); } @Override public void sessionCreated(IoSession session) throws Exception { super.sessionCreated(session); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { super.sessionIdle(session, status); } @Override public void sessionOpened(IoSession session) throws Exception { super.sessionOpened(session); } }
MyActivity.javaapi
@SuppressWarnings("ALL") public class MyActivity extends Activity { Button btn_send; TextView tv_msg; EditText etv_type_msg; private String IP = "192.168.2.174"; private int PORT = 9900; String msg_send = ""; SocketConnector connector; SocketAddress socketAddress; ConnectFuture future; IoFilter filter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.setProperty("java.net.preferIPv6Addresses","false"); btn_send = (Button)findViewById(R.id.btn_send); tv_msg = (TextView)findViewById(R.id.tv_msg); etv_type_msg = (EditText)findViewById(R.id.etv_type_msg); tv_msg.setEllipsize(TextUtils.TruncateAt.MARQUEE); tv_msg.setMarqueeRepeatLimit(6); connector = new NioSocketConnector(); filter = new ProtocolCodecFilter(new TextLineCodecFactory()); connector.getFilterChain().addLast("codec", filter); socketAddress = new InetSocketAddress(IP,PORT); connector.setHandler(new ClientHandler()); future = connector.connect(socketAddress); future.join(); if (!future.isConnected()) { tv_msg.setText("Connect fail"); future.getException().printStackTrace(); return; } else { final IoSession session = future.getSession(); etv_type_msg.setText(""); session.write("Connect Successful"); btn_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String sendMsgText = etv_type_msg.getText().toString() + "\r\n"; session.write(sendMsgText); tv_msg.append(sendMsgText); etv_type_msg.setText(""); } }); } } }
ClientHandler.java服務器
package com.blogspot.cartonsbase.Client; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class ClientHandler extends IoHandlerAdapter{ public void messageReceived(IoSession session, Object message) throws Exception { super.messageReceived(session, message); } public void exceptionCaught(IoSession session, Throwable cause)throws Exception { super.exceptionCaught(session, cause); } @Override public void messageSent(IoSession session, Object message) throws Exception { super.messageSent(session, message); } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.blogspot.cartonsbase.Client" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.CALL_PHONE" > </uses-permission> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" > <activity android:name="MyActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
codesession
全部文章與 http://cartonsbase.blogspot.com 同步app