- StreamSocket:基于TCP协议的封装,以流的方式提供数据交互服务,提供了稳定的双向通信,通过“三次握手”建立连接,传输数据具有较高的稳定性。
Java中客户端使用Socket类,服务器端使用ServerSocket类。 - DatagramSocket:基于UDP协议的封装,以数据报文的方式提供数据交互服务,提供了不稳定的单向通信,具有更好的执行效率,由于基于无连接的方式,传输数据不稳定,不保证数据的完整性。
Java中使用DatagramPacket类,表示数据报包;DatagramSocket类,进行端到端通信。
Messager
底层也是通过封装AIDL来实现的,所以使用的方式和AIDL基本类似。
1.在服务端进程Service中创建Messenger对象,用来接收客户端发来的Message数据,和获取客户端Messenger对象,并给客户端发Message数据。
2.创建客户端Messenger对象,用来接收服务端数据。
3.客户端绑定服务端服务,并获取服务端Messenger对象,用来给服务端发Message数据。
4.通过服务端Messenger发消息,将客户端Messenger对象,添加到Message.replyTo。
public class MsgerService extends Service {
private Messenger mServerMessenger = new Messenger(new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 接收客户端发过来的消息
switch (msg.what) {
case 1000:
Toast.makeText(getBaseContext(), “” + msg.arg1, Toast.LENGTH_SHORT).show();
Message cMsg = Message.obtain();
cMsg.what = msg.what;
Bundle bundle = new Bundle();
bundle.putString(“name”, “Jim”);
cMsg.obj = bundle;
// 获取客户端的Messenger对象,需要客户端在发送消息时设置
Mess