Я работаю над реализацией сети Token Ring, я пытаюсь передать маркерный кадр из станции в кольцо, используя DatagramPacket
. Преобразовать объект кадра в массив байтов с использованием этого:Де-сериализация объекта для объекта класса
public static byte[] serialize(Object obj) throws IOException {
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(obj);
return b.toByteArray();
}
, а затем преобразовать его обратно с помощью этого:
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream b = new ByteArrayInputStream(bytes);
ObjectInputStream o = new ObjectInputStream(b);
return o.readObject();
}
Каждая станция работает два потока.
public void go() {
t.println("Sending to: " + main_host_address);
t.println("Station Address: " + station_address);
t.println("MAC Address: " + MAC_Address);
DatagramSocket socket;
InetSocketAddress saddr;
try {
saddr= new InetSocketAddress("localhost", main_host_address);
socket= new DatagramSocket(station_address); // Create a socket and a datagram from the buffer data
(new Thread(new receivingThread(socket))).start(); // start threads for receiving and sending
(new Thread(new sendingThread(socket, saddr, frame))).start();
}catch(Exception e) {
e.printStackTrace();
}
}
..и все они получают от одного адреса - кольцо.
Теперь, в классе Ring
, я пытаюсь преобразовать массив байтов, но он ничего не делает, я запускаю цикл while, но он не обходит цикл, как только он пытается преобразовать массив байтов в Frame
объект.
public void run() {
byte [] buffer;
DatagramPacket packet;
//Receive the packet
try{
buffer = new byte[5];
int i = 0;
packet = new DatagramPacket(buffer, buffer.length);
int recievedData = 0;
while(true){
t.println("Recieving....");
socket.receive(packet);
Thread.sleep(2000);
recievedData = packet.getData()[0];
t.println("Reciever: " + recievedData);
//here I'm trying a different way of getting the byte array
//Before, I had; byte [] data = packet.getData();
//but it didnt work so i was trying this longer way
//and still the same result.
List<Byte> list = new ArrayList<Byte>();
for(i = 0; i < packet.getData().length; i++){
t.print(packet.getData()[i] + " ");
list.add(packet.getData()[i]);
}
Byte [] d = list.toArray(new Byte[list.size()]);
byte[] data = new byte[d.length];
int j=0;
for(Byte b: d){
data[j++] = b.byteValue();
}
frame = (Frame) deserialize(data); //I think the problem is here
t.println("From frame: " + frame.SD[0]);
}
}catch(Exception e){
}
}
Как я могу исправить это, пожалуйста? Спасибо.