我的應用程序有一個主站和多個從站,它們響應主站的呼叫套接字並將對象中的統計信息發送出去。現在,我正在用一個主控器和兩個從器件測試代碼。代碼適用於1個奴隸,但有2個奴隸,主人收到的物品會被填充兩次,即同一物品的兩個副本。序列化期間的競爭條件
微波激射器的代碼:主從從站週期性地接收,並因此使用定時器exceuting:
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();
}
}
和從屬的代碼:
{
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();
}
}
懷疑: 1.我應該對象存儲從數組中的兩個奴隸?如果是這樣,我如何區分套接字上的兩個接收對象,以便同一個對象不會被存儲兩次?假設發送的對象具有唯一的屬性,如id。 即
class PM{
int uniqueid;
}
- 我想寫整個代碼,因此不希望使用的Jini或其他API。 謝謝!
正在發送什麼對象?你如何保存它們? – Kane
PM級的對象pm正在從機側發送。我使用一組PM對象將它們保存在主設備的一側。我有回答你的問題嗎? –