Mon application a un maître et de nombreux esclaves qui répondent aux sockets Call-Over du maître et envoient les statistiques dans un objet. En ce moment, je teste le code avec un maître et deux esclaves. Le code fonctionne bien avec 1 esclave mais avec 2 esclaves, les objets reçus à la fin du maître sont peuplés deux fois. Deux copies du même objet.Condition de course pendant la sérialisation
Code de Maser: Le maître reçoit périodiquement des esclaves et exceuting donc à l'aide d'une minuterie:
public void run() {
try {
byte[] recvBuf = new byte[15000];
DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
DatagramSocket dSock = new DatagramSocket(4445);
dSock.receive(packet);
int byteCount = packet.getLength();
ByteArrayInputStream byteStream = new ByteArrayInputStream(recvBuf);
ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(byteStream));
//receiving the object pm of class PM
pm1=(PM)is.readObject();
}
}
et le code de l'esclave:
{
InetAddress address = InetAddress.getByName("10.129.54.254");
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(15000);
os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
os.flush();
//sending the object pm of class PM
os.writeObject((PM)pm);
os.flush();
byte[] sendBuf = byteStream.toByteArray();
DatagramPacket packet = new DatagramPacket(sendBuf, sendBuf.length, address, 4445);
int byteCount = packet.getLength();
DatagramSocket dSock = new DatagramSocket();
dSock.send(packet);
os.close();
dSock.close();
}
}
doute: 1. Dois-je stocker les objets de les deux esclaves dans un tableau? Si oui, comment puis-je différencier les deux objets reçus sur le socket pour que le même objet ne soit pas stocké deux fois? En supposant que l'objet envoyé a un attribut unique tel que id. -à-dire
class PM{
int uniqueid;
}
- Je suis en train d'écrire tout le code et donc ne veulent pas utiliser Jini ou d'autres API. Merci!
Quels objets sont envoyés? Comment les sauvez-vous? – Kane
Les objets pm de la classe PM sont envoyés du côté de l'esclave. Je les sauvegarde du côté du maître en utilisant une série d'objets PM. Ai-je répondu à votre question? –