android WebSocketClient和TCP协议Socket

WebSocketClient封装

public class SockClient extends WebSocketClient {
    //设置一个接口 提供外部数据 类似handle功能
    private SockClient.OnOkButtonFireListener okListener;
    public interface OnOkButtonFireListener{
        public void onOpen();
        public void onMessage(String resultStr);
    }
    public void setOkListener(SockClient.OnOkButtonFireListener okListener) {
        this.okListener = okListener;
    }

    public SockClient(String url,Map var3) {
        //1请求地址, 2版本号需和服务端一直, 3上传参数, 4请求超时时间
        super(URI.create(url), new Draft_17(), var3, 120000);
    }

    //添加安全协议
    public void SetAgreement(){
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, null, null);
            SSLSocketFactory factory = sc.getSocketFactory();
            this.setSocket(factory.createSocket());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //连接服务器
    public void connect(){
        try {
            this.connectBlocking();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


    @Override
    public void onOpen(ServerHandshake serverHandshake) {
        System.out.println("握手成功");
        okListener.onOpen();
    }

    @Override
    public void onMessage(String s) {
        System.out.println("返回消息");
        //次位置可以对返回的s 数据进行处理使外面的数据可以更便捷使用 根据需求而定
        okListener.onMessage(s);
    }

    @Override
    public void onClose(int i, String s, boolean b) {
        System.out.println("关闭连接");
    }

    @Override
    public void onError(Exception e) {
        System.out.println("连接失败:"+e.getMessage());
    }
}

 WebSocketClient调用方法

 public static void main(String[] args) {
        String url = "http://localhost:8080/socket";
        Map headerMap = new HashMap();
        headerMap.put("token", "upload-parameters");
        final SockClient socket = new SockClient(url,headerMap);
        socket.setOkListener(new SockClient.OnOkButtonFireListener() {
            @Override
            public void onOpen() {
                //握手成功后发送一条指令 根据需求而定
                socket.send("information");
            }

            @Override
            public void onMessage(String resultStr) {
                System.out.println("消息:"+resultStr);
            }
        });
        socket.SetAgreement();
        socket.connect();
    }

TCP协议Socket方法封装

public class SocketCon {
    //设置一个接口 提供外部数据 类似handle功能
    private SocketCon.OnOkButtonFireListener okListener;
    public interface OnOkButtonFireListener{
        public void onMessage(String resultStr);
    }
    public void setOkListener(SocketCon.OnOkButtonFireListener okListener) {
        this.okListener = okListener;
    }

    private BufferedReader br;
    private BufferedWriter bw;
    private InputStream in;
    private OutputStream out;
    private Socket socket = null;
    private SocketSender sender;
    private SocketReceiver receiver;

    public SocketCon(){
        try {
            socket = new Socket("ip地址", 8080);
            socket.setSoTimeout(1000);
            in = socket.getInputStream();
            out = socket.getOutputStream();
            br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
            bw = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
            //接收数据开启一个线程
            receiver = new SocketReceiver();
            //发送数据开启一个线程
            sender = new SocketSender();
        }catch (Exception e){
            e.getMessage();
        }

    }

    //判断是否连接成功
    public boolean isConnected(){
        return socket.isConnected();
    }

    //发送消息
    public void sendMag(String mag){
        if(null!=sender && null!=mag){
            sender.sendStr = mag;
        }
    }

    public class SocketSender implements Runnable {
        private boolean alive;
        public Thread thread;
        public boolean ThreadStop;
        public String sendStr = "";
        public SocketSender() {
            ThreadStop=false;
            alive = true;
            sendStr = "";
            thread = new Thread(this);
            thread.start();
        }
        public void run() {
            while (alive) {
                if(ThreadStop){
                    break;
                }
                try {
                    if (null!=sendStr && !"".equals(sendStr)) {
                        bw.write(sendStr, 0, sendStr.length());
                        bw.flush();
                        sendStr = "";
                    }
                    synchronized (this) {
                        wait(100);
                    }
                    Thread.yield();
                } catch (Exception e) {
                    e.printStackTrace();
                    close();
                }
            }
        }

        public void free() {
            alive = false;
            ThreadStop=true;
        }
    }

    public class SocketReceiver implements Runnable {
        public boolean alive;
        public Thread thread;
        public boolean ThreadStop;

        public SocketReceiver() {
            alive = true;
            ThreadStop= false;
            thread = new Thread(this);
            thread.start();
        }

        public void run() {
            while (alive) {
                try {
                    if(ThreadStop){
                        break;
                    }
                    String text=br.readLine();
                    if(text!=null){
                        okListener.onMessage(text);
                    }
                    synchronized (this) {
                        wait(100);
                    }
                    Thread.yield();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        public void free() {
            alive = false;
            ThreadStop= true;
        }
    }

    public void close() {
        try {
            if (socket != null) {
                socket.close();
                socket = null;
            }
            if (sender != null) {
                sender.free();
                sender = null;
            }
            if (receiver != null) {
                receiver.free();
                receiver = null;
            }
            in = null;
            out = null;
            br = null;
            bw = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 方法调用

public static void main(String[] args) {

        SocketCon scket = new SocketCon();
        scket.setOkListener(new SocketCon.OnOkButtonFireListener() {
            @Override
            public void onMessage(String resultStr) {
                System.out.println("接收到消息:"+resultStr)
            }
        });

        //发送消息
        //scket.sendMag("消息");

        //关闭连接
        //scket.close();
    }

 

你可能感兴趣的:(android)