美文网首页Android开发积累
Android之Socket类的封装

Android之Socket类的封装

作者: zheng_zq | 来源:发表于2019-06-17 16:44 被阅读7次

先看看效果图:

image.png

实现思路

把MainActivity的Handler传递到SocketActivity,用于处理接受服务器传来的信息。

第一步 加权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

第二步 SocketActivity

package com.example.socket04.socket;

import android.os.Handler;
import android.os.Message;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

public class SocketActivity {
    Socket socket = new Socket();
    private final int HANDLER_MSG_TELL_RECV = 0x124;
    private OutputStream outputStream = null;

    /**
     * 连接服务器并且监听
     *
     * @param handler
     * @param host
     * @param port
     */
    public void startNetThread(final Handler handler, final String host, final int port) {
        new Thread() {
            @Override
            public void run() {
                try {
                    socket.connect(new InetSocketAddress(host, port), 3000);
                    InputStream inputStream = socket.getInputStream();
                    byte[] bytes = new byte[1024];
                    int n = inputStream.read(bytes);
                    while (true) {
                        Message msg = handler.obtainMessage(HANDLER_MSG_TELL_RECV, new String(bytes, 0, n));
                        msg.sendToTarget();
                        n = inputStream.read(bytes);
                    }
                } catch (Exception e) {
                }
            }
        }.start();
    }

    /**
     * 异步发送信息
     *
     * @param data
     */
    public void sendData(final String data) {
        new Thread() {
            @Override
            public void run() {
                try {
                    outputStream = socket.getOutputStream();
                    outputStream.write(data.getBytes());
                    outputStream.flush();
                } catch (Exception e) {
                }
            }
        }.start();
    }

    /**
     * 断开连接
     */
    public void closeSocket() {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

第三步 MainActivity

  • 实例化对象
    SocketActivity socketActivity = new SocketActivity();
  • Handler
 /**
     * 接受到数据
     */
    @SuppressLint("HandlerLeak")
    Handler handler01 = new Handler() {
        public void handleMessage(Message msg) {
            tv_res.setText((msg.obj).toString());
        }
    };
  • 连接服务器
    socketActivity.startNetThread(handler01, host, port); //链接服务器
  • 发送信息
    socketActivity.sendData(et_send.getText().toString()); //发送数据
  • 断开连接
    socketActivity.closeSocket(); //断开链接

相关文章

网友评论

    本文标题:Android之Socket类的封装

    本文链接:https://www.haomeiwen.com/subject/dzfzfctx.html