A Preliminary Study of Android Socket

Recently, the project needs to use socket communication, so I studied it. First, the socket is divided into two ends, one is the client socket, and the other is the server socket. First of all, let’s talk about their connection methods, which are said to be three-way handshakes. Here Without talking about this, take a look at the code where they connect:

client

 
 
Socket socket = new Socket("192.168.1.1", 10010);

Server

ServerSocket mServerSocket = new ServerSocket(SERVER_PORT);
Socket  mSocket = mServerSocket.accept();

There are two streams, input and output streams. The input stream is mainly used to receive messages from the other party, and the output stream is mainly used to send messages to the other party.

InputStream inputStream = mSocket.getInputStream();
 OutputStream onStream = mSocket.getOutputStream();

client demo

package com.example.socket.client;

import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "SocketDemo";
    private EditText et;
    private Socket socket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);

        and = findViewById(R.id.and);
        Button connect = findViewById(R.id.btn_connect);
        Button send = findViewById(R.id.btn_send);
        Button over = findViewById(R.id.btn_over);


        connect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (true) {
                            try {
                                socket = new Socket(et.getText().toString().trim(), 9999);
                                InputStream inputStream = socket.getInputStream();
                                byte[] buffer = new byte[1024];
                                int len;
                                StringBuffer sb = new StringBuffer();
                                Log.d(TAG, "client----begin--->>>>:");
                                while ((len = inputStream.read(buffer)) != -1) {
                                    String data = new String(buffer, 0, len);
                                    sb.append(data);
                                    Log.d(TAG, "client---receive-: " + data);
                                    try {
                                        JSONObject jsonObject = new JSONObject(data);
                                    } catch (JSONException e) {
                                        e.printStackTrace ();
                                        Log.d(TAG, "json->>>>:" + e.getMessage());
                                    }
                                }
                                Log.d(TAG, "client---receive-full message: " + sb.toString());
                                Log.d(TAG, "client----end--->>>>:");
                            } catch (IOException e) {
                                e.printStackTrace ();
                            }
                        }


                    }
                }).start();
            }
        });

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            if (socket != null) {
                                OutputStream outputStream = socket.getOutputStream();
                                outputStream.write("{\"cmd\": \"login\"}".getBytes());
                                outputStream.flush();
                            }

                        } catch (IOException e) {
                            e.printStackTrace ();
                        }
                    }
                }).start();
            }
        });
        over.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            if (socket != null) {
                                OutputStream outputStream = socket.getOutputStream();
                                outputStream.write("EOF".getBytes());
                                outputStream.flush();
                                outputStream.close();
                            }

                        } catch (IOException e) {
                            e.printStackTrace ();
                        }
                    }
                }).start();
            }
        });

    }

}

Server demo

package com.example.socket.serverclient;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "SocketDemo";
    private ServerSocket mServerSocket = null;
    private Socket mSocket = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {

                while (true) {
                    try {
                        mServerSocket = new ServerSocket(9999);
                        mSocket = mServerSocket.accept();
                        InputStream inputStream = mSocket.getInputStream();
                        byte[] buffer = new byte[1024];
                        int len;
                        StringBuilder sb = new StringBuilder();
                        while ((len = inputStream.read(buffer)) != -1) {
                            String text = new String(buffer, 0, len);
                            if (text.equals("EOF")) {
                                break;
                            }
                            sb.append(text);
                            Log.d(TAG, "server receive " + sb.toString());
                        }
                        Log.d(TAG, "server receive 收到的完整消息 " + sb.toString());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    public void click(View view) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    if (mSocket != null) {
                        OutputStream outputStream = mSocket.getOutputStream();
                        outputStream.write("{\"cmd\": \"loginOut\"}".getBytes());
                        outputStream.flush();
//                        outputStream.close();
//                        mSocket.shutdownOutput();
                    }

                } catch (IOException e) {
                    e.printStackTrace ();
                }
            }
        }).start();
    }

    public void over(View view) {
        if (mSocket != null) {
            try {
                mSocket.getOutputStream().close();
            } catch (IOException e) {
                e.printStackTrace ();
            }
        }
    }
}




Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324646249&siteId=291194637