A Preliminary Study of Android Socket

Recently, the project uses 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 method, which is said to be a three-way handshake. 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 received the complete message received" + 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=324726730&siteId=291194637