package avoidMobilePhoneLost;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;/**
 * 客户端
 * 
 * 能够断开后重连
 * 
 * @author ASUKA
 * 
 */
public class Client {
private Socket socket; public Client() { } //发送信息线程
private class SendMsgHandler implements Runnable { @Override
public void run() {
try { /**
 * 创建输出流向服务器发送字符
 */ OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
PrintWriter writer = new PrintWriter(osw, true);// 行刷新
// Scanner sc = new Scanner(System.in);
String msg = null;
while (true) { msg = "1";
writer.println(msg);
// System.out.println("send" + msg);
} } catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println("连接断开发送");
} }
} //启动接收发送线程
public void start() {
Runnable handler = new GetServerMessageHandler();
Thread thread = new Thread(handler);
thread.setDaemon(true);// 设置为后台线程
thread.start();
Runnable handler2 = new SendMsgHandler();
Thread thread2 = new Thread(handler2);
thread2.setDaemon(true);// 设置为后台线程
thread2.start();
} private class GetServerMessageHandler implements Runnable {
/**
 * socket获取缓冲字符输入流循环获取获取服务器字符串输出到控制台
 */
@Override
public void run() {
try { /**
 * 获取缓冲字符流
 */
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream(), "UTF-8"));
String msg = null; while ((msg = reader.readLine()) != null) {
} } catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
System.out.println("连接中断接收");//希望这里的信息能用TextView显示
} catch (IOException e) {
e.printStackTrace();
}
}
} } public static void main(String[] args) {
// 首先创建一个连接
Client client = new Client();
client.socket = new Socket();
SocketAddress sa = new InetSocketAddress("192.168.173.1", 56789);
try {
client.socket.connect(sa);
client.start();
} catch (IOException e1) {
e1.printStackTrace();
}
while (true) {// 不断尝试链接 // 如果断开连接会关闭socket
if (client.socket.isClosed()/* && !client.socket.isConnected() */) { try {
System.out.println("连接中。");//希望这里的信息能用TextView显示
client = new Client();
client.socket = new Socket();
sa = new InetSocketAddress("192.168.173.1", 56789);
client.socket.connect(sa);
client.start();
} catch (IOException e) {
e.printStackTrace();
}
// 没有连接成功关闭socket
if (!client.socket.isConnected()) {
try {
client.socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} }
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} }
}
}