Android Socket通信

在流的创建时要制定编码,乱码与socket无关.

Client:

/**
 *
 * @author Kevin
 *
 */
public class SocketClient extends Thread {
    private Socket socket;
    private PrintWriter out;
    private BufferedReader in;
    private Handler handler;
    private boolean isRunning = true;

    private static SocketClient instance = null;

    public static SocketClient getInstance(boolean reConnect) {

        if (reConnect) {
            if (instance != null) {
                instance.stopRunning();
                instance = null;
            }
        }

        if (instance == null) {
            instance = new SocketClient();
            instance.start();
        }

        return instance;
    }

    public Handler getHandler() {
        return handler;
    }

    public void setHandler(Handler handler) {
        this.handler = handler;
    }

    public boolean isConnected() {
        return socket.isConnected();
    }

    private SocketClient() {
        try {
            socket = new Socket(AuthorizeUtils.host, AuthorizeUtils.port);
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                    socket.getOutputStream(), "GB2312")), true);

            in = new BufferedReader(new InputStreamReader(
                    socket.getInputStream(),"GB2312"));

            isRunning = true;
        } catch (Exception e) {
        }
    }

    public void sendMessage(String str) {
        out.print(str + "\n");
        out.flush();
    }

    public void run() {
        String msg = "";
        try {
            while (isRunning) {
                msg = in.readLine();
                if (msg != null && !msg.equals("")) {
                    //业务处理
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void stopRunning() {
        try {
            this.isRunning = false;
            out.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

 

Server:

public class Server extends Thread {
    PrintWriter out;
    BufferedReader in;

    public Server() {
        try {
            ServerSocket server = new ServerSocket(9999);
            Socket socket = server.accept();
            System.out.println(socket.getInetAddress() + "已连接");
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "GB2312")), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GB2312"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void sendMessage() {
        while (true) {
            Scanner scanner = new Scanner(System.in);
            String str = scanner.next();
            if (str != null && !str.equals("")) {
                out.print(str + "\n");
                out.flush();
            }
        }
    }

    @Override
    public void run() {
        String msg = "";
        while (true) {
            try {
                msg = in.readLine();
                if (msg != null) {
                    System.out.println(msg);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Server server = new Server();
        server.start();
        server.sendMessage();
    }

}

猜你喜欢

转载自summitlylee.iteye.com/blog/1707120