Android开发积累

Android之Socket类的封装

2019-06-17  本文已影响7人  zheng_zq

先看看效果图:

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

 /**
     * 接受到数据
     */
    @SuppressLint("HandlerLeak")
    Handler handler01 = new Handler() {
        public void handleMessage(Message msg) {
            tv_res.setText((msg.obj).toString());
        }
    };
上一篇下一篇

猜你喜欢

热点阅读