Mình đang làm đồ án tạo Group chat, nhưng đang gặp lỗi mấy hôm rồi sửa không được. Mình giải thích sơ để bạn nào giúp mình dể hiểu Code.
A gởi yêu cầu lập Group tới B, và 1 yêu cầu khác tới C.
B đồng ý gởi trả lời lại cho A. C Đồng ý gởi trả lời lại
A tạo ra 2 cái JFrame, 1 cái để chat với B 1 cái chat với C và mở 2 port khác nhau để chat.
Nhưng mình bị lỗi là tuy nó hiện lên 2 cái JFrame nhưng cả 2 đều có thông tin của cả B và C. khi mình gởi chat trong 2 cái đó đều gởi cho cả B và C.
Mong các bạn xem giúp mình sai chỗ nào với

A gởi yêu cầu tạo Group
Mã:
 DatagramSocket socket;
            try {
                 numGroup = numGroup + 1;
                 p = new Group(name_Myacc, ip_Myacc, port_Myacc, numGroup, list_user);
                socket = new DatagramSocket();
                for (int j = 0; j < listUserInGroup.size(); j++) {
                    byte[] buff_read = new byte[1024];

                    String st = "CREATEGROUP," + name_Myacc + "," + ip_Myacc + "," + port_Myacc + "," + userDung;
                    buff_read = st.getBytes();
                    InetAddress desAdd = InetAddress.getByName(listUserInGroup.get(j).Ip);
                    DatagramPacket packetSend = new DatagramPacket(buff_read, buff_read.length, desAdd, listUserInGroup.get(j).getPort());
                    socket.send(packetSend);
                    System.out.println("Goi ..... " + st + " toi port" + listUserInGroup.get(j).getPort());

                }
                listUserInGroup.clear();
            } catch (SocketException ex) {
                Logger.getLogger(Chat.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Chat.class.getName()).log(Level.SEVERE, null, ex);
            }
B và C nhận gói tin yêu cầu lập Group gởi accept về A

Mã:
if (strRequest.equals("CREATEGROUP")) // Mời lập Group
                    {
                        //hiện ra frame chọn lập group
                        int click = JOptionPane.showConfirmDialog(null, temp[1] + " moi ban lap Group cung " + temp[4]);
                        /ếu chọn Yes gởi gói tin AGREE
                        if (click == JOptionPane.YES_OPTION) {

                            byte[] buff_read = new byte[1024];
                            numGroup = numGroup + 1;
                            String st = "AGREEGROUP," + name_Myacc + "," + ip_Myacc + "," + port_Myacc + "," + numGroup;
                            buff_read = st.getBytes();
                            InetAddress desAdd = InetAddress.getByName(strIp);
                            DatagramPacket packetSend = new DatagramPacket(buff_read, buff_read.length, desAdd, port);
                            System.out.println("Goi ..... " + st + " toi port" + port);
                            DatagramSocket socket = new DatagramSocket(null);
                            socket.setReuseAddress(true);
                            socket.bind(new InetSocketAddress(ip_Myacc, port_Myacc));
                            socket.send(packetSend);
                            socket.close();

                        } else {
                            byte[] buff_read = new byte[1024];

                            String st = "DISAGREEGROUP," + name_Myacc + "," + ip_Myacc + "," + port_Myacc;
                            buff_read = st.getBytes();
                            InetAddress desAdd = InetAddress.getByName(strIp);
                            DatagramPacket packetSend = new DatagramPacket(buff_read, buff_read.length, desAdd, port);
                            DatagramSocket socket = new DatagramSocket(null);
                            socket.setReuseAddress(true);
                            socket.bind(new InetSocketAddress(ip_Myacc, port_Myacc));
                            socket.send(packetSend);
                            socket.close();
                        }
                    }
A nhận được gói tin trả lời. lập danh sách gởi tới B và C và tạo ra Frame. sau khi B và C nhận được danh sách lập Frame của mình
Mã:
else if (strRequest.equals("AGREEGROUP") || strRequest.equals("DISAGREEGROUP")) // Peer đồng ý gia nhập Group
                    {
                        count++;
                        user_friend tam1 = new user_friend("", "", 0);
                        user_Group tam2 = new user_Group(tam1, 0);
                        if (strRequest.equals("AGREEGROUP")) {//Lưu thông tin user đã đồng ý
                            infoUser = infoUser + "," + temp[1] + "/" + temp[2] + "/" + temp[3] + "/" + temp[4];
                            tam1 = new user_friend(temp[1], temp[2], Integer.parseInt(temp[3]));
                            tam2 = new user_Group(tam1, Integer.parseInt(temp[4]));
                            listInGroupTrung.add(tam2);
                        }

                        if (count == countUser) {//Nhận được đúng số lượng đã mời
                            //Tạo Frame
                           
                            //Lấy ra danh sách không nằm trong list Group
                            
                            for (int i = 0; i < list_user.size(); i++) {
                                for (int j = 0; j < listInGroupTrung.size(); j++) {
                                    if (!(list_user.get(i).getName().equals(listInGroupTrung.get(j).getFriend().getName()))) {
                                        tam1 = new user_friend(list_user.get(i).getName(), list_user.get(i).getIp(), list_user.get(i).getPort());
                                        p.listUserNotInGroup.add(tam1);
                                    }
                                }
                            }
                            for (int j = 0; j < listInGroupTrung.size(); j++) {
                                tam2 = listInGroupTrung.get(j);
                                p.listUserInGroup.add(tam2);
                            }
                            p.setVisible(true);
                            p.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                            //Gởi đi thông tin IP và PORT các user đồng ý
                            for (int i = 0; i < listInGroupTrung.size(); i++) {
                                byte[] buff_read = new byte[1024];
                                String st = "LISTGROUP," + name_Myacc + "," + ip_Myacc + "," + port_Myacc + "," + numGroup + infoUser;
                                buff_read = st.getBytes();
                                InetAddress desAdd = InetAddress.getByName(listInGroupTrung.get(i).getFriend().getIp());
                                port = listInGroupTrung.get(i).getFriend().getPort();
                                DatagramPacket packetSend = new DatagramPacket(buff_read, buff_read.length, desAdd, port);
                                DatagramSocket socket = new DatagramSocket(null);
                                System.out.println("Goi ..... " + st + " toi port" + port);
                                socket.setReuseAddress(true);
                                socket.bind(new InetSocketAddress(ip_Myacc, port_Myacc));
                                socket.send(packetSend);
                                socket.close();
                                System.out.println (p.listUserInGroup.get(i).getFriend().getName());
                            }
                            infoUser = "";
                            countUser = 0;
                            count = 0;
                            listInGroupTrung.clear();

                        }