android socket工具类

来源:互联网 发布:sqlserver update多行 编辑:程序博客网 时间:2024/06/17 00:24
package doge.healthcare.Utils;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.util.Log;import android.widget.Toast;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;import doge.healthcare.activity.Main;import doge.healthcare.activity.inital;import doge.healthcare.base.BaseActivity;/** * Created by doge on 2017/4/25. */public class SocketUtil {    private int port = 6666;    private int SUCCESS= 1;    private int INTERNET_ERROR=0;    private int SERVER_ERROR=-1;    private int CODE_ERROR=-2;    public SocketUtil() {    }    public SocketUtil(int port) {        this.port = port;    }    //发送数据给服务器,且不返回数据到原活动    public synchronized void send(final String message) {
//主线程不能网络操作,因此必须开一个新的线程        new Thread(new Runnable() {            @Override            public void run() {                try {                    //建立客户端socket连接,指定服务器位置及端口                    Socket C_socket = new Socket("127.0.0.1", port);//这里改ip和端口                    //socket的输入流和输出流                    java.io.OutputStream os = C_socket.getOutputStream();                    BufferedWriter C_BW = new BufferedWriter(new OutputStreamWriter(os));                    InputStream is = C_socket.getInputStream();                    BufferedReader C_br = new BufferedReader(new InputStreamReader(is));                    //对socket进行读写操作                    C_BW.write(message);                    C_BW.flush();                    C_br.close();                    is.close();                    C_BW.close();                    os.close();                    C_socket.close();                } catch (UnknownHostException e) {                    e.printStackTrace();                    System.out.println("IOException e");                } catch (IOException e) {                    e.printStackTrace();                    System.out.println("IOException e");                }            }        }).start();    }    //    向服务器查询数据,且将服务器发回的字符串通过handler传回去//    初始化时需传入发送的消息与用来响应返回数据的handler    public synchronized void inquire (final String message, final Handler mHandler) {        new Thread(new Runnable() {            @Override            public void run() {                try {                    //建立客户端socket连接,指定服务器位置及端口                    Socket C_socket = new Socket("127.0.0.1", port);                    //socket的输入流和输出流                    OutputStream os = C_socket.getOutputStream();                    BufferedWriter BW = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));                    InputStream is = C_socket.getInputStream();                    BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));                    //对socket进行读写操作                    String send_message = new String(message.getBytes("UTF-8"));                    BW.write(send_message);                    BW.flush();                    String receive = "";                    String content;                    while ((content = br.readLine()) != null) {                        receive += content;                    }                    Message msg = new Message();                    msg.obj= receive;                    mHandler.sendMessage(msg);                    br.close();                    is.close();                    BW.close();                    os.close();                    C_socket.close();                } catch (UnknownHostException e) {                    e.printStackTrace();                    System.out.println("UnknownHostException e");                } catch (IOException e) {                    e.printStackTrace();                    System.out.println("IOException e");                }            }        }).start();    }    //发送数据给服务器,且保存到sharedpreference(这个可有可无,为了方便写的)    public synchronized void sendMessage(final String message, final BaseActivity login,final Handler mHandler) {        new Thread(new Runnable() {            @Override            public void run() {                try {                    //建立客户端socket连接,指定服务器位置及端口                    Socket C_socket = new Socket("127.0.0.1", port);                    //socket的输入流和输出流                    OutputStream os = C_socket.getOutputStream();                    BufferedWriter BW = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));                    InputStream is = C_socket.getInputStream();                    BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));                    //对socket进行读写操作                    String send_message = new String(message.getBytes("UTF-8"));                    BW.write(send_message);                    BW.flush();                    String receive = "";                    String content;                    while ((content = br.readLine()) != null) {                        receive += content+'\n';                    }                    String [] result =  receive.split("\n");                    if (result[0].equals("操作成功")) {                        mHandler.sendEmptyMessage(SUCCESS);                        if (result.length>1)                        {                            SharedPreferences sp = login.getSharedPreferences("user", Context.MODE_PRIVATE);                            SharedPreferences.Editor editor = sp.edit();                            editor.putString("name",result[1] );//键值对                            editor.commit();                        }                    } else                        mHandler.sendEmptyMessage(CODE_ERROR);                    br.close();                    is.close();                    BW.close();                    os.close();                    C_socket.close();                } catch (UnknownHostException e) {                    e.printStackTrace();                    System.out.println("UnknownHostException e");                    mHandler.sendEmptyMessage(SERVER_ERROR);                } catch (IOException e) {                    e.printStackTrace();                    System.out.println("IOException e");                    mHandler.sendEmptyMessage(INTERNET_ERROR);                }            }        }).start();    }}
使用方法如下:
  new SocketUtil().sendMessage("login" + '\n' + accout + '\n' + password +  '\n', login, mHandler);
   发送消息   
//初始化handler,SUCCESS,INTERNET ERROR 都是int
  final Handler mHandler = new Handler() {            @Override            public void handleMessage(Message msg) {                super.handleMessage(msg);                                    if(msg.what== SUCCESS) {                        Toast.makeText(login.getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show();                        SharedPreferences sp = getSharedPreferences("user", Context.MODE_PRIVATE);                        SharedPreferences.Editor editor = sp.edit();                        editor.putString("account",ac.getText().toString());//键值对                        editor.putString("password",pw.getText().toString());                        editor.commit();                        Intent intent = new Intent(Login.this, Main.class);                        startActivity(intent);                        Login.this.finish();                    }                     else if(msg.what== INTERNET_ERROR) {                        Toast.makeText(login.getApplicationContext(), "登录失败,网络异常", Toast.LENGTH_SHORT).show();                    }                    else if(msg.what== SERVER_ERROR){                        Toast.makeText(login.getApplicationContext(), "登录失败,服务器异常", Toast.LENGTH_SHORT).show();                    }                    else if(msg.what== CODE_ERROR){                        Toast.makeText(login.getApplicationContext(), "登录失败,密码错误", Toast.LENGTH_SHORT).show();                    }            }        };




 
原创粉丝点击