首页

Android的socket长连接(心跳检测)

java

2020-8-2

客户端代码:

package com.example.sockettest;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";

	private Intent mServiceIntent;
	private IBackService iBackService;
	private TextView tv;
	private EditText et;
	private Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initViews();
		initData();
	}

	private void initViews() {
		tv = (TextView) findViewById(R.id.tv);
		et = (EditText) findViewById(R.id.editText1);
		btn = (Button) findViewById(R.id.button1);
	}

	private void initData() {
		mServiceIntent = new Intent(this, BackService.class);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				String string = et.getText().toString().trim();
				Log.i(TAG, string);
				try {
					Log.i(TAG, "是否为空:"   iBackService);
					if (iBackService == null) {
						Toast.makeText(getApplicationContext(),
								"没有连接,可能是服务器已断开", Toast.LENGTH_SHORT).show();
					} else {
						boolean isSend = iBackService.sendMessage(string);
						Toast.makeText(MainActivity.this,
								isSend ? "success" : "fail", Toast.LENGTH_SHORT)
								.show();
						et.setText("");
					}
				} catch (RemoteException e) {
					e.printStackTrace();
				}
			}
		});
	}

	@Override
	protected void onStart() {
		super.onStart();
		bindService(mServiceIntent, conn, BIND_AUTO_CREATE);
		// 开始服务
		registerReceiver();
	}

	@Override
	protected void onResume() {
		super.onResume();
		// 注册广播 最好在onResume中注册
		// registerReceiver();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 注销广播 最好在onPause上注销
		unregisterReceiver(mReceiver);
		// 注销服务
		unbindService(conn);
	}

	// 注册广播
	private void registerReceiver() {
		IntentFilter intentFilter = new IntentFilter();
		intentFilter.addAction(BackService.HEART_BEAT_ACTION);
		intentFilter.addAction(BackService.MESSAGE_ACTION);
		registerReceiver(mReceiver, intentFilter);
	}

	private BroadcastReceiver mReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			// 消息广播
			if (action.equals(BackService.MESSAGE_ACTION)) {
				String stringExtra = intent.getStringExtra("message");
				tv.setText(stringExtra);
			} else if (action.equals(BackService.HEART_BEAT_ACTION)) {// 心跳广播
				tv.setText("正常心跳");
			}
		}
	};

	private ServiceConnection conn = new ServiceConnection() {
		@Override
		public void onServiceDisconnected(ComponentName name) {
			// 未连接为空
			iBackService = null;
		}

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// 已连接
			iBackService = IBackService.Stub.asInterface(service);
		}
	};
}

服务端代码:

package com.mina;

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

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.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SocketAcceptor acceptor = new NioSocketAcceptor();
		 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));  
		acceptor.setHandler(new ServerHandler());
		acceptor.getSessionConfig().setReadBufferSize(2048);  
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		int bindPoit = 9900;
		try {
			acceptor.bind(new InetSocketAddress(bindPoit));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
资源下载此资源下载价格为3D币(VIP免费),请先
资源文件列表
SocketTestService_服务器端/.classpath , 484
SocketTestService_服务器端/.project , 376
SocketTestService_服务器端/.settings/org.eclipse.jdt.core.prefs , 587
SocketTestService_服务器端/bin/com/mina/MinaServer.class , 2046
SocketTestService_服务器端/bin/com/mina/ServerHandler.class , 2836
SocketTestService_服务器端/libs/mina-core-2.0.7.jar , 644783
SocketTestService_服务器端/libs/slf4j-api-1.5.0.jar , 16591
SocketTestService_服务器端/libs/slf4j-api-1.6.6.jar , 26176
SocketTestService_服务器端/libs/slf4j-nop.jar , 12592
SocketTestService_服务器端/src/com/mina/MinaServer.java , 1002
SocketTestService_服务器端/src/com/mina/ServerHandler.java , 1587
SocketTest_客户端/.classpath , 364
SocketTest_客户端/.project , 871
SocketTest_客户端/.settings/org.eclipse.jdt.core.prefs , 177
SocketTest_客户端/AndroidManifest.xml , 943
SocketTest_客户端/bin/aidl/com/example/sockettest/IBackService.aidl , 98
SocketTest_客户端/bin/AndroidManifest.xml , 943
SocketTest_客户端/bin/classes/com/example/sockettest/BackService$1.class , 823
SocketTest_客户端/bin/classes/com/example/sockettest/BackService$2.class , 1769
SocketTest_客户端/bin/classes/com/example/sockettest/BackService$InitSocketThread.class , 910
SocketTest_客户端/bin/classes/com/example/sockettest/BackService$ReadThread.class , 2770
SocketTest_客户端/bin/classes/com/example/sockettest/BackService.class , 4832
SocketTest_客户端/bin/classes/com/example/sockettest/BuildConfig.class , 353
SocketTest_客户端/bin/classes/com/example/sockettest/IBackService$Stub$Proxy.class , 1628
SocketTest_客户端/bin/classes/com/example/sockettest/IBackService$Stub.class , 2041
SocketTest_客户端/bin/classes/com/example/sockettest/IBackService.aidl , 98
SocketTest_客户端/bin/classes/com/example/sockettest/IBackService.class , 342
SocketTest_客户端/bin/classes/com/example/sockettest/MainActivity$1.class , 1407
SocketTest_客户端/bin/classes/com/example/sockettest/MainActivity$2.class , 1244
SocketTest_客户端/bin/classes/com/example/sockettest/MainActivity$3.class , 2276
SocketTest_客户端/bin/classes/com/example/sockettest/MainActivity.class , 3509
SocketTest_客户端/bin/classes/com/example/sockettest/R$attr.class , 352
SocketTest_客户端/bin/classes/com/example/sockettest/R$dimen.class , 473
SocketTest_客户端/bin/classes/com/example/sockettest/R$drawable.class , 419
SocketTest_客户端/bin/classes/com/example/sockettest/R$id.class , 495
SocketTest_客户端/bin/classes/com/example/sockettest/R$layout.class , 415
SocketTest_客户端/bin/classes/com/example/sockettest/R$menu.class , 400
SocketTest_客户端/bin/classes/com/example/sockettest/R$string.class , 484
SocketTest_客户端/bin/classes/com/example/sockettest/R$style.class , 443
SocketTest_客户端/bin/classes/com/example/sockettest/R.class , 713
SocketTest_客户端/bin/classes.dex , 454676
SocketTest_客户端/bin/dexedLibs/android-support-v4-ab7512e887dd581257496a86108f2a68.jar , 149766
SocketTest_客户端/bin/dexedLibs/android-support-v4-b447d43a4d7a09f5b32950fa43d61fcc.jar , 149766
SocketTest_客户端/bin/jarlist.cache , 119
SocketTest_客户端/bin/res/drawable-hdpi/ic_launcher.png , 5964
SocketTest_客户端/bin/res/drawable-mdpi/ic_launcher.png , 3112
SocketTest_客户端/bin/res/drawable-xhdpi/ic_launcher.png , 9355
SocketTest_客户端/bin/res/drawable-xxhdpi/ic_launcher.png , 17889
SocketTest_客户端/bin/resources.ap_ , 41047
SocketTest_客户端/bin/SocketTest.apk , 198222
SocketTest_客户端/bin/SocketTest_socket长连接心跳包.apk , 198609
SocketTest_客户端/gen/com/example/sockettest/BuildConfig.java , 164
SocketTest_客户端/gen/com/example/sockettest/IBackService.java , 2700
SocketTest_客户端/gen/com/example/sockettest/R.java , 2653
SocketTest_客户端/ic_launcher-web.png , 51394
SocketTest_客户端/libs/android-support-v4.jar , 385685
SocketTest_客户端/LICENSE , 10249
SocketTest_客户端/proguard-project.txt , 781
SocketTest_客户端/project.properties , 563
SocketTest_客户端/README.md , 13
SocketTest_客户端/res/drawable-hdpi/ic_launcher.png , 7658
SocketTest_客户端/res/drawable-mdpi/ic_launcher.png , 3777
SocketTest_客户端/res/drawable-xhdpi/ic_launcher.png , 12516
SocketTest_客户端/res/drawable-xxhdpi/ic_launcher.png , 24777
SocketTest_客户端/res/layout/activity_main.xml , 1084
SocketTest_客户端/res/menu/main.xml , 261
SocketTest_客户端/res/values/dimens.xml , 218
SocketTest_客户端/res/values/strings.xml , 225
SocketTest_客户端/res/values/styles.xml , 695
SocketTest_客户端/res/values-sw600dp/dimens.xml , 201
SocketTest_客户端/res/values-sw720dp-land/dimens.xml , 275
SocketTest_客户端/res/values-v11/styles.xml , 332
SocketTest_客户端/res/values-v14/styles.xml , 389
SocketTest_客户端/SocketTest/AndroidManifest.xml , 932
SocketTest_客户端/SocketTest/libs/android-support-v4.jar , 349252
SocketTest_客户端/SocketTest/project.properties , 563
SocketTest_客户端/SocketTest/res/drawable-hdpi/ic_action_search.png , 3120
SocketTest_客户端/SocketTest/res/drawable-hdpi/ic_launcher.png , 3014
SocketTest_客户端/SocketTest/res/drawable-ldpi/ic_launcher.png , 1504
SocketTest_客户端/SocketTest/res/drawable-mdpi/ic_action_search.png , 3030
SocketTest_客户端/SocketTest/res/drawable-mdpi/ic_launcher.png , 1969
SocketTest_客户端/SocketTest/res/drawable-xhdpi/ic_action_search.png , 3199
SocketTest_客户端/SocketTest/res/drawable-xhdpi/ic_launcher.png , 4006
SocketTest_客户端/SocketTest/res/layout/activity_main.xml , 1097
SocketTest_客户端/SocketTest/res/menu/activity_main.xml , 240
SocketTest_客户端/SocketTest/res/values/strings.xml , 239
SocketTest_客户端/SocketTest/res/values/styles.xml , 85
SocketTest_客户端/SocketTest/res/values-v11/styles.xml , 90
SocketTest_客户端/SocketTest/res/values-v14/styles.xml , 104
SocketTest_客户端/SocketTest/src/org/feng/sockettest/MainActivity.java , 3267
SocketTest_客户端/SocketTest/src/org/feng/sockettest/server/BackService.java , 4707
SocketTest_客户端/SocketTest/src/org/feng/sockettest/server/IBackService.aidl , 100
SocketTest_客户端/SocketTestService/.classpath , 538
SocketTest_客户端/SocketTestService/.project , 376
SocketTest_客户端/SocketTestService/.settings/org.eclipse.jdt.core.prefs , 587
SocketTest_客户端/SocketTestService/bin/com/mina/MinaServer.class , 2066
SocketTest_客户端/SocketTestService/bin/com/mina/ServerHandler.class , 2836
SocketTest_客户端/SocketTestService/libs/mina-core-2.0.7.jar , 644783
SocketTest_客户端/SocketTestService/libs/slf4j-api-1.6.6.jar , 26176
SocketTest_客户端/SocketTestService/libs/slf4j-nop-1.6.6.jar , 4781
SocketTest_客户端/SocketTestService/src/com/mina/MinaServer.java , 1007
SocketTest_客户端/SocketTestService/src/com/mina/ServerHandler.java , 1587
SocketTest_客户端/src/com/example/sockettest/BackService.java , 4998
SocketTest_客户端/src/com/example/sockettest/IBackService.aidl , 98
SocketTest_客户端/src/com/example/sockettest/MainActivity.java , 3533
没有账号? 忘记密码?

社交账号快速登录