main

 avatarhacker98
Publica year ago13 Snippets
Search
Language
Sort by
📅 Created Date
Order

SocketServerService

plain_texta year ago
package com.example.chatappdemo;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import com.example.chatappdemo.DAO.ConversationDAO;
import com.example.chatappdemo.DAO.MessDAO;
import com.example.chatappdemo.DAO.MyinfoDAO;
import com.example.chatappdemo.DAO.ReceiveRequestDAO;
import com.example.chatappdemo.DAO.SentRequestDAO;
import com.example.chatappdemo.model.Conversation;
import com.example.chatappdemo.model.Mess;
import com.example.chatappdemo.model.Myinfo;
import com.example.chatappdemo.model.ReceiveRequest;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Locale;

public class SocketServerService extends Service {

    private static final String TAG = "SocketServerService";
    private ServerSocket serverSocket;
    private Thread socketServerThread;
    private javaExternal func= new javaExternal();
    private Myinfo myinfo;
    @Override
    public void onCreate() {
        super.onCreate();
        MyinfoDAO myinfoDAO = new MyinfoDAO(this);
        String myIP= getDeviceIpAddress();
        myinfo = myinfoDAO.getInfoByIP(myIP);
        // Khởi tạo server trên một cổng nào đó
        socketServerThread = new Thread(() -> {
            try {
                serverSocket = new ServerSocket(1234);  // Chọn cổng cho server
                Log.i(TAG, "Server started on port 1234");

                while (!Thread.currentThread().isInterrupted()) {
                    Socket clientSocket = serverSocket.accept();
                    Log.i(TAG, "Client connected");
                    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                    String message = in.readLine();
                    Log.i(TAG, "Message from client: " + message);
                    String messText="";
                    String ClientIP= String.valueOf(clientSocket.getInetAddress().getHostAddress());
                    try{
                        JSONObject jsonObject=new JSONObject(message.toString());
                        String type=jsonObject.getString("type");
                        switch (type) {
                            case "MESSAGE": {
                                JSONObject messageContent = jsonObject.getJSONObject("content");
                                messText = messageContent.getString("mess_text");
//                                save database
                                Log.i("Socket","tin nhan nhan duoc tu" +ClientIP+ " la : " + messText);
                                ConversationDAO conversationDAO = new ConversationDAO(this);
                                MessDAO messDAO =new MessDAO(this);
                                Conversation conversation =conversationDAO.getConversationByIPReceive(ClientIP);

//                               giai ma tin nhan
                                String messAlgorithm= messageContent.getString("algorithm");
                                String messDecrypt="giai ma that bai";
                                if(messAlgorithm.equals("AES128")){
                                    messDecrypt = func.decryptAES128(messText,conversation.getKeyEncrypt128());
                                }else if(messAlgorithm.equals("AES256")){
                                    messDecrypt = func.decryptAES256(messText,conversation.getKeyEncrypt256());
                                }else if(messAlgorithm.equals("SNOWV")){
                                    messDecrypt = func.decryptSNOWV(messText,conversation.getKeyEncrypt256());
                                }
//                               save database
                                Mess messSave= new Mess(conversation.getConver_id(),ClientIP,messText,getCurrentTime(),messAlgorithm);
                                conversation.setLast_mess(messDecrypt);
                                conversation.setLast_mess_time(getCurrentTime());
                                conversationDAO.updateConversation(conversation);
                                messDAO.insertMess(messSave);
//                                tao su kien
                                Intent intent = new Intent("com.example.chatappdemo.NEW_MESSAGE");
                                intent.putExtra("ClientIP",ClientIP);
                                intent.putExtra("message", messDecrypt);
                                sendBroadcast(intent);
                                break;
                            }
                            case "FRIEND_REQUEST": {
                                JSONObject messContent = jsonObject.getJSONObject("content");
//                            save database
                                String IPRequest = messContent.getString("IPRequest");
                                String name = messContent.getString("name");
                                String publicKey = messContent.getString("publicKey");
                                ReceiveRequest receiveRequest = new ReceiveRequest(IPRequest, name, publicKey);
                                ReceiveRequestDAO receiveRequestDAO = new ReceiveRequestDAO(this);
                                receiveRequestDAO.insertReceiveRequest(receiveRequest);

                                Intent intent = new Intent("com.example.chatappdemo.NEW_REQUEST");
                                sendBroadcast(intent);
                                break;
                            }
                            case "FRIEND_RESPONSE": {
                                JSONObject messContent = jsonObject.getJSONObject("content");
                                SentRequestDAO sentRequestDAO = new SentRequestDAO(this);
                                ConversationDAO conversationDAO = new ConversationDAO(this);

                                String IPSent = messContent.getString("IPSent");
                                String name = messContent.getString("name");
                                String key128 = messContent.getString("key128");
                                String key256= messContent.getString("key256");
                                String status = messContent.getString("status");


                                if (status.equals("ACCEPT")) {
                                    sentRequestDAO.deleteSentRequestByIP(IPSent);
//                                    giai ma khoa ma hoa
                                    String keyEnrypt128= func.decryptRSA(key128,myinfo.getPrivateKey());
                                    String keyEnrypt256 = func.decryptRSA(key256,myinfo.getPrivateKey());
//                                    luu vao database
                                    Conversation conversation = new Conversation(IPSent, name, " ", " ", keyEnrypt128,keyEnrypt256,"AES128");
                                    conversationDAO.insertConversation(conversation);
//                                    gui broadcast
                                    Intent intent = new Intent("com.example.chatappdemo.CHANGE_ADAPTER_ACCEPT");
                                    intent.putExtra("status",status);
                                    intent.putExtra("ClientIP",ClientIP);
                                    sendBroadcast(intent);
                                } else {
                                    sentRequestDAO.deleteSentRequestByIP(IPSent);
                                    Intent intent = new Intent("com.example.chatappdemo.CHANGE_ADAPTER_REFUSE");
                                    intent.putExtra("status",status);
                                    intent.putExtra("ClientIP",ClientIP);
                                    sendBroadcast(intent);
                                }
                                break;
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    in.close();
                    clientSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        socketServerThread.start();
    }
    public String getCurrentTime(){
        SimpleDateFormat sdf= new SimpleDateFormat("hh:mm a", Locale.getDefault());
        return sdf.format(new Date());
    }
    private String getDeviceIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().matches("\\d+\\.\\d+\\.\\d+\\.\\d+")) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (Exception ex) {
            Log.e(TAG, "Không thể lấy địa chỉ IP của thiết bị", ex);
        }
        return null;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        // Dừng server socket khi service bị hủy
        if (serverSocket != null && !serverSocket.isClosed()) {
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socketServerThread.interrupt();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;  // Không sử dụng binding
    }
}

ScanNetworkActivity

plain_texta year ago
package com.example.chatappdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public class ScanNetworkActivity extends AppCompatActivity {
    private static final String TAG = "NetworkScan";
    private static final int TIMEOUT_MS = 100; // Thời gian chờ (timeout) khi ping
    private ListView listView;
    private ArrayAdapter<String> adapter;
    private List<String> ipList = new ArrayList<>();
    private final int TOTAL_THREADS = 10;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_network);

        listView = findViewById(R.id.listView);
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, ipList);
        listView.setAdapter(adapter);

        ipList.clear();
        adapter.notifyDataSetChanged();
        CountDownLatch latch = new CountDownLatch(TOTAL_THREADS);
        Toast.makeText(ScanNetworkActivity.this, "Bắt đầu quét mạng...", Toast.LENGTH_SHORT).show();
        String subnet="192.168.244";
        new Thread(() -> startNetworkScan(subnet, 1, 25, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 26, 50, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 51, 75, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 76, 100, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 101, 125, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 126, 150, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 151, 175, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 176, 200, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 201, 225, latch)).start();
        new Thread(() -> startNetworkScan(subnet, 226, 254, latch)).start();
        // Tạo một luồng để đợi cho tất cả luồng quét hoàn thành
        new Thread(() -> {
            try {
                latch.await();
                runOnUiThread(() -> {
                    Toast.makeText(ScanNetworkActivity.this, "Quét mạng hoàn tất!", Toast.LENGTH_SHORT).show();
                });

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        // Xử lý khi người dùng chọn IP từ danh sách
        listView.setOnItemClickListener((parent, view, position, id) -> {
            String selectedIp = ipList.get(position);
            Toast.makeText(ScanNetworkActivity.this, "Đã chọn IP: " + selectedIp, Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(ScanNetworkActivity.this, ChatActivity.class);
            intent.putExtra("conversation_IP",selectedIp);
            startActivity(intent);
        });
    }

    private String getDeviceIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().matches("\\d+\\.\\d+\\.\\d+\\.\\d+")) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (Exception ex) {
            Log.e(TAG, "Không thể lấy địa chỉ IP của thiết bị", ex);
        }
        return null;
    }

    // Phương thức quét mạng cho một phạm vi IP nhất định
    private void startNetworkScan(String subnet, int start, int end, CountDownLatch latch) {
        String deviceIpAddress = getDeviceIpAddress();

        // Quét từng IP trong phạm vi start đến end
        for (int i = start; i <= end; i++) {
            String host = subnet + "." + i;

            // Bỏ qua IP của thiết bị hiện tại
            if (host.equals(deviceIpAddress)) {
                Log.d(TAG, "Bỏ qua địa chỉ IP của thiết bị: " + host);
                continue;
            }

            // Thực hiện quét từng IP và cập nhật giao diện
            try {
                InetAddress inetAddress = InetAddress.getByName(host);
                if (inetAddress.isReachable(TIMEOUT_MS)) {
                    Log.d(TAG, "Đã tìm thấy thiết bị: " + host);

                    // Cập nhật danh sách IP trên UI
                    runOnUiThread(() -> {
                        ipList.add(host);
                        adapter.notifyDataSetChanged();
                    });
                } else {
                    Log.d(TAG, "Không thể ping IP: " + host);
                }

                // Tạm dừng giữa các lần quét để giảm tải hệ thống
                Thread.sleep(100);  // Nghỉ 100ms giữa các lần quét để tránh quá tải

            } catch (IOException | InterruptedException e) {
                Log.e(TAG, "Lỗi khi quét IP: " + host, e);
            }
        }
        latch.countDown();
    }
}

RSAKey

plain_texta year ago
package com.example.chatappdemo;

public class RSAKey {
    public String publicKey;
    public String privateKey;
    public RSAKey(){
        publicKey = new String();
        privateKey = new String();
    }

    public RSAKey(String publicKey, String privateKey) {
        this.publicKey = publicKey;
        this.privateKey = privateKey;
    }

    public String getPublicKey() {
        return publicKey;
    }

    public void setPublicKey(String publicKey) {
        this.publicKey = publicKey;
    }

    public String getPrivateKey() {
        return privateKey;
    }

    public void setPrivateKey(String privateKey) {
        this.privateKey = privateKey;
    }
}

RequestReceiveAdapter

plain_texta year ago
package com.example.chatappdemo;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.chatappdemo.model.Conversation;
import com.example.chatappdemo.model.ReceiveRequest;


import java.util.List;

public class RequestReceiveAdapter extends RecyclerView.Adapter<RequestReceiveAdapter.RequestReceiveViewHolder> {
    private List<ReceiveRequest> requestList;
    private OnRequestClickListener listener;

    public RequestReceiveAdapter(List<ReceiveRequest> requestList, OnRequestClickListener listener) {
        this.requestList = requestList;
        this.listener = listener;
    }



    @NonNull
    @Override
    public RequestReceiveViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_request_receive, parent, false); // Thay đổi layout theo tên file item layout bạn đã tạo
        return new RequestReceiveViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RequestReceiveViewHolder holder, int position) {
        ReceiveRequest request = requestList.get(position);
        holder.textViewIPRequest.setText(request.getIPRequest());
        holder.textViewName.setText(request.getName());
        holder.bind(request, listener);
    }
    public void updateRequestList(List<ReceiveRequest> updatedRequestList) {
        // Cập nhật lại danh sách dữ liệu mới
        this.requestList.clear();
        this.requestList.addAll(updatedRequestList);

        // Thông báo cho adapter rằng dữ liệu đã thay đổi
        notifyDataSetChanged();
    }
    @Override
    public int getItemCount() {
        return requestList.size();
    }

    public static class RequestReceiveViewHolder extends RecyclerView.ViewHolder {
        TextView textViewIPRequest;
        TextView textViewName;

        public RequestReceiveViewHolder(@NonNull View itemView) {
            super(itemView);
            textViewIPRequest = itemView.findViewById(R.id.textViewIPRequest); // Đảm bảo ID đúng trong layout
            textViewName = itemView.findViewById(R.id.textViewName); // Đảm bảo ID đúng trong layout
        }

        public void bind(ReceiveRequest request, OnRequestClickListener listener) {
            // Xử lý sự kiện click vào item
            itemView.setOnClickListener(v -> {
                if (listener != null) {
                    listener.onRequestClick(request);
                }
            });
        }
    }


}

OnRequestClickListener

plain_texta year ago
package com.example.chatappdemo;

import com.example.chatappdemo.model.ReceiveRequest;

public interface OnRequestClickListener {
    void onRequestClick(ReceiveRequest request);
}
  • Total 13 snippets
  • 1
  • 2
  • 3