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:
Ngọc Bích xanh bản chất thuộc dòng đá đá hoa (jade). Và cẩm thạch là tên gọi chung của ngọc bích. Vì thực chất chúng thuộc dòng đá đa khoáng được hình thành từ chất Silicat dưới dạng dioxy. Ngọc bích...
Chia sẻ Vòng tay ngọc bích xanh là...