美文网首页Android知识Android开发Android
Android网络操作之套接字简单封装

Android网络操作之套接字简单封装

作者: ZacharyWang | 来源:发表于2016-09-03 22:12 被阅读356次

我的所有文章会在我的个人博客首发和更新,欢迎关注。
虽然Android开发中多数情况下使用http与后台进行数据交互,但有时套接字是http不能替代的,与http有众多的的第三方库如okttp等不同,套接字并没有多少第三方库可供选择,通常都是根据实际业务自行封装,本文介绍如何在Android中封装套接字进行网络操作并更新UI。

众所周知,网络操作这种耗时操作是要放在子线程中进行的,所以套接字封装后,数据在子线程中被发送,然后将接收到的数据放进Message通过Handler发送回主线程,在进行UI更新。

  • 下面以用户登录为例,将套接字封装为一个Thread类。

编写套接字Thread类

下面的代码首先发送登录指令,在收到服务端的握手信息后,然后发送在构造方法中获得的通过已定义的方法构造的xml数据,得到服务端的响应后,将响应结果通过Handler发送回主线程。

LoginSocketClient.java


package xyz.zhenhua.smartcom.net;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.nio.Buffer;
import xyz.zhenhua.smartcom.utils.Utils;
import xyz.zhenhua.smartcom.xmlparse.ParseUser;


/**
 * Created by zachary on 16/8/31.
 */

public class LoginSocketClient extends Thread {
    private ParseUser parseUser = new ParseUser();
    private Handler handler;
    private String data;
    private String ip = Utils.ip;
    private int port = Utils.port;
    public LoginSocketClient(Handler handler,String username, String password){
        this.handler = handler;
        this.data = parseUser.PackUser(username,password);
    }

    public void run(){
        try{
            Socket socket = new Socket(ip,port);
            Log.i("LoginClient","获取连接中");
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            Log.i("LoginClient","获取输入输出流成功");
            bw.write("USER_LOGIN");
            Log.i("LoginClient","已发送:"+data);
            bw.flush();
            String result = new String();
            char []c = new char[100];
            int l = 0;
            while((l=br.read(c))!=-1){
                result = new String(c,0,l);
                Log.i("LoginClient","收到:"+result);
                if(result.equals("Hello\0")){
                    bw.write(user);
                    bw.flush();
                    Log.i("LoginClient","已发送:"+user);
                }else if(result.equals("Login_failed")){
                    Message message = new Message();
                    message.what = Utils.LOGIN_FAILE;
                    handler.sendMessage(message);
                } else{
                    Message message = new Message();
                    message.what = Utils.LOGIN_SUCESS;
                    message.obj = result;
                    handler.sendMessage(message);
                }
            }
            bw.close();
            br.close();
            socket.close();
        }catch (Exception e){
        }
    }
}


主线程中调用LoginSocketClient

调用就更简单啦,一句话搞定,当然,要先实例化一个Handler来接收子线程中返回的信息来更新UI。

//调用LoginSocketClient
new LoginSocketClient(hanlder,username,password).start();

相关文章

  • Android网络操作之套接字简单封装

    我的所有文章会在我的个人博客首发和更新,欢迎关注。虽然Android开发中多数情况下使用http与后台进行数据交互...

  • IPC之Socket

    参考Android开发艺术探索 Socket Socket:套接字,网络通信值的概念,分为流式套接字和用户数据套接...

  • SOCKET与NIO

    1. 套接字(SOCKET)相关概念 网络套接字的基本操作:创建(socket)、命名(bind)、侦听(list...

  • iOS网络编程之Socket

    1、套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元...

  • java学习-Socket类的学习

    java的网络编程中一个重要的类就是Socket类,这个类封装了java的套接字操作。 首先,来看一下这个类的主要...

  • 套接口、ip、端口号相关

    1. 网络相关概念 1.1 套接口的概念 套接口,也叫“套接字”。是操作系统内核中的一个数据结构,它是网络中的节点...

  • iOS之Socket编程最全总结

    Socket简介: 所谓socket,通常称为“套接字”,网络应用程序通过套接字向网络发送请求或者应答网络请求...

  • 使用Socket处理跨进程的实时聊天

    欢迎Follow我的GitHub, 关注我的简书. 其余参考Android目录. Socket是套接字, 网络通信...

  • 用socket和多进程配合多线程实现简单的tcp的聊天服务器

    python中的socket套接字用于实现网络通信tcp套接字的使用流程如下: 创建套接字对象 --- cli...

  • linux手册翻译——socket(7)

    socket - Linux 套接字接口 本手册页描述了 Linux 网络套接字层用户接口。 套接字是用户进程和内...

网友评论

    本文标题:Android网络操作之套接字简单封装

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