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