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();
}
View more random threads:
Với sự đa dạng và phong phú về mẫu mã và giá cả, choxeonline.vn hứa hẹn sẽ là địa chỉ tin cậy cho những ai đang tìm kiếm chiếc xe ô tô ưng ý. Từ những mẫu xe hạng sang đến những chiếc xe gia đình...
Khám Phá Đa Dạng Sản Phẩm Xe Ô Tô...