android socket工具類

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();


                    }
            }

        };





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章