我所做的主要要求是使用多个成员使用线程创建群聊;但是,我到达了一个位置,我需要为迟到的成员发送旧消息,他们需要接收所有以前的消息以及现在正在发送的消息。
我设法使用相同的地址和端口创建组的成员,我复制了类并更改了具有不同ID的每个配置以区分成员。我还设法使用一个从每个成员发送消息的线程来创建它们之间的通信。
我的代码基于线程,所以这是我发送消息的线程类:
public SendMessagesThread (MulticastSocket groupSocket, InetAddress groupAddress, String ID, int numMsgs) {
this.groupSocket = groupSocket;
this.groupAddress = groupAddress;
this.ID = ID;
this.numMsgs = numMsgs;
this.start();
}
public void run(){
try {
System.out.println("Transmitting new messages to the group: ");
for ( int i = 1; i <= numMsgs ; i++ ) {
String m = new String ("MSG" + ID + i);
DatagramPacket msgOut = new DatagramPacket(m.getBytes(), m.length(), groupAddress, groupSocket.getLocalPort());
groupSocket.send(msgOut);
我还有一个memberThread类来创建成员并运行上一个线程。我还创建了另一个线程来存储每个成员的消息,这是线程:
MulticastSocket groupSocket;
InetAddress groupAddress;
int numMsgs;
String ID;
public storeMessagesThread (MulticastSocket groupSocket, InetAddress groupAddress, String ID, int numMsgs) {
this.groupSocket = groupSocket;
this.groupAddress = groupAddress;
this.ID = ID;
this.numMsgs = numMsgs;
this.start();
}
public void run(){
try {
//MulticastSocket s =null;
System.out.println("storing messages of member "+ID); //where should i store the data??
byte[] buffer = new byte[1000]; // to get the message
ArrayList<String> data = new ArrayList<>();
for ( int i = 1; i <= numMsgs ; i++ ) {
DatagramPacket msgIn = new DatagramPacket(buffer,buffer.length);
groupSocket.receive(msgIn);
String newmsg = new String(msgIn.getData(), 0, msgIn.getLength());
String msg = newmsg;
data.add(msg);
}
oldMessages storing = new oldMessages(data);
我要在这里完成的工作是如何创建另一个线程,以将组成员的旧消息发送给新添加的成员。我要达到的结果是,该组的新成员可以接收加入之前的旧消息;但是,以我为例,该组的新成员不会收到旧消息,而只会收到新消息。