Lập trình socket trong Android.

Lập trình socket trong Android.

Bạn đã bao giờ tự hỏi mình rằng làm sao các ứng dụng chat trực tuyến có thể giúp mình nói chuyện với nhau được hay không, bạn đã bao giờ thắc mắc là nó hoạt động như thế nào chưa hôm nay tôi sẽ giới thiệu với các bạn một phương thức đơn giản để hai ứng dụng có thể nói chuyện với nhau đó chính là socket.

Socket là gì

Đầu tiên là hàn lâm học thuật về SocketSocket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ ( client) và một chương trình cung cấp dịch vụ (server) trên mạng LAN, WAN hay Internet. Một socket trên máy yêu cầu dịch vụ có địa chỉ mạng được cấp sẵn để gọi một socket trên máy cung cấp dịch vụ. Một khi socket đó được thiết lập phù hợp, hai bên có thể trao đổi dịch vụ và dữ liệu.

Nói chung là thằng server sẽ tạo ra một server luôn luôn lắng nghe luôn luôn thấu hiểu ở một cổng nào đó ví dụ như 8888 để thằng Client hãy nói theo cách của bạn. Khi thằng Client muốn nói với Server thì nó phải xác định được Cổng và IP của Server đang ở đâu giống như bạn cần xác định cái *** bạn gái à nhầm xin lỗi giống như xác định địa chỉ và cổng nhà bạn gái để đến gọi bạn gái đi chơi vậy.

Sử dụng Socket trong Android.

Đầu tiên để dựng mô hình này ta cần xây nhà cho bố vợ(Server) đã =))

Mình đã ký hợp đồng với nhà cung cấp gạch đá hiệu Java rồi nên giờ chỉ có xây thôi.

Và đây là nhà của bố vợ.

Code:
package Socket;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

public static void main(String[] args) throws IOException {

// Khởi tạo đối tượng Server socket cổng 3333
 ServerSocket ss = new ServerSocket(3333);
 Socket s = ss.accept();/// Khởi tạo Socket và chấp nhận kết nối từ đối tượng Socket Server.
 DataInputStream din = new DataInputStream(s.getInputStream());/// Tạo luồng đọc dữ liệu vào từ client
 DataOutputStream dout = new DataOutputStream(s.getOutputStream());// Tạo luồng in dữ liệu ra ví dụ như bạn xin
 // phép bố bạn gái chở bạn gái đi chơi nhưng
 // ông thấy mặt bạn không ổn nên ổng phản
 // hồi là CÚT.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// Tạo bộ đệm đọc đọc dữ liệu
 // Vòng lặp luôn luôn lắng nghe và chẳng bao giờ thấu hiểu của bố vợ tương lai
 // =))
 String str = "", str2 = "";
 while (!str.equals("stop")) {
 str = din.readUTF();
 System.out.println("client says: " + str);
 str2 = br.readLine();
 dout.writeUTF(str2);
 dout.flush();
 }
 din.close();
 s.close();
 ss.close();
 }

}

Còn đây là bạn =))

Đầu tiên là cái mặt bạn đã có vẻ không đập choai nên ổng không ưa rồi.

Giao diện ứng dụng

Giao diện ứng dụng

Code:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.tuandc.akinosora.socket.MainActivity">

    <EditText
        android:id="@+id/editText2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="241dp"
        app:layout_constraintHorizontal_bias="0.0"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:text="Send to PC"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="66dp"
        app:layout_constraintTop_toBottomOf="@+id/editText2"
        app:layout_constraintHorizontal_bias="0.0"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp" />
</android.support.constraint.ConstraintLayout>

Còn đây là cách bạn sẽ nói chuyện với bố vợ.

Code:
package com.tuandc.akinosora.socket;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {
    EditText e1;
    Button button;
    private static Socket s;
    private static ServerSocket ss;
    private static InputStreamReader Isr;
    private static BufferedReader br;
    private static PrintWriter printWriter;
    String message = "";
    private static String ip = "192.168.1.13"; // ĐỊa chỉ IP của Server

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1 = (EditText) findViewById(R.id.editText2);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                send_text();
            }
        });
    }

    public void send_text() {
        message = e1.getText().toString();
        myTask mt = new myTask();
        mt.execute();
        Toast.makeText(this, "Send Data", Toast.LENGTH_SHORT).show();
    }

    class myTask extends AsyncTask<String, Void, String> {



        public String connectSever(final String ip, final String port, final String a){
            String output=null;
            try {
                Socket cl=new Socket(ip,Integer.parseInt(port));//ket noi server

                PrintWriter pw=new PrintWriter(cl.getOutputStream(),true);//tao luong gui du lieu
                pw.println(""+a);// Gửi dữ liệu đi
                BufferedReader br=new BufferedReader(new InputStreamReader(cl.getInputStream()));//tao luong nhan du lieu
                output=br.readLine();// Đọc dữ liệu trả về từ Server
                cl.close();
            } catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            return output;//tra ve ket qua từ Server
        }

        @Override
        protected String doInBackground(String... strings) {
            String a = strings[0];
         String s=   connectSever(ip, "8888", a);
            return s;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
        }
    }
}

Xong vậy là mình đã giới thiệu xong phương thức giao tiếp của các ứng dụng chat thông qua socket. bạn nào có hứng thú có thể tìm hiểu sâu hơn về nó và tạo ra một phần mềm chat riêng dành cho bạn và bạn gái.

Cảm ơn các bạn đã theo dõi và hẹn gặp lại các bạn ở các hướng dẫn tiếp theo.