Witam.
Mam taki problem:

Mam kilka obiektów klasy person i chce je przesłać przez sieć (używam własnego mechanizmu serializacji, bo klient jest w midlecie a tam nie ma serializable, weygląda to tak:)

klient midlet:

	public void synchronize() throws IOException, SQLException {
		new Thread() {
			public void run() {
				try {
					sock = (SocketConnection) Connector.open("socket://127.0.0.1:9999");

					DataOutputStream dout = sock.openDataOutputStream();

					Vector vPersons = DBManager.getInstance().getPersonsToSynchronization();
					Vector vNotes = DBManager.getInstance().getNotesToSynchronization();

					dout.writeInt(vPersons.size());
					dout.writeInt(vNotes.size());

					for (int i = 0; i < vPersons.size(); i++) {
						((Person) vPersons.elementAt(i)).write(dout);
					}

					for (int i = 0; i < vNotes.size(); i++) {
						((Note) vNotes.elementAt(i)).write(dout);
					}

					DataInputStream din = sock.openDataInputStream();

					int personsCount = din.readInt();
					int notesCount = din.readInt();
					Person p = null;
					for (int i = 0; i < personsCount; i++) {
						p = new Person();
						p.read(din);
						DBManager.getInstance().savePerson(p);
					}

					Note n = null;

					for (int i = 0; i < notesCount; i++) {
						n = new Note();
						n.read(din);
						p = DBManager.getInstance().loadPerson(
								n.getPerson_id().intValue());
						DBManager.getInstance().saveNote(p, n);
					}
					
					sock.close();
				}
				catch (IOException e) {
					e.printStackTrace();
				}
				catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}.start();


	}

od strony serwera wygląda tak:

	@Override
	public void run() {
		try {
			DataInputStream din = new DataInputStream(sock.getInputStream());
			int personCount = din.readInt();
			int notesCount = din.readInt();
			Person p = null;
			List<Person> persons = new ArrayList<Person>();
			for(int i = 0 ; i < personCount; i++){
				p = new Person();
				p.read(din);
				persons.add(p);
			}
			
			Note n = null;
			List<Note> notes = new ArrayList<Note>();
			for(int i = 0 ; i < notesCount; i++){
				n = new Note();
				n.read(din);
				notes.add(n);
			}
			
			Iterator<Person> pIterator = persons.iterator();
			while(pIterator.hasNext()){
				DBManager.getInstance().synchronize(pIterator.next());
			}
			
			Iterator<Note> nIterator = notes.iterator();
			while (nIterator.hasNext()) {
				  DBManager.getInstance().synchronize(nIterator.next());
			}
			
			List<Person> returnPerson = DBManager.getInstance().getPersonsToSynchronization();
			List<Note> returnNote = DBManager.getInstance().getNotesToSynchronization();
			
			DataOutputStream dout = new DataOutputStream(sock.getOutputStream());
			
			dout.writeInt(returnPerson.size());
			dout.writeInt(returnNote.size());
			
			pIterator = returnPerson.iterator();
			while(pIterator.hasNext()){
				p = pIterator.next();
				p.write(dout);
				DBManager.getInstance().setStatus(p, Constants.SYNCHRONIZED);
			}
			
			nIterator = returnNote.iterator();
			while(nIterator.hasNext()){
				n = nIterator.next();
				n.write(dout);
				DBManager.getInstance().setStatus(n, Constants.SYNCHRONIZED);
				
			}
//			din.close();
//			dout.close();
//			sock.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

W debugu serwer przesyła 3 obiekty do strumienia a klient odbiera tylko jednego (chyba ostatniego na liście) a analogicznie dzieje się jak ściągam klientów z komórki na serwer.

Prosze o pomoc. myślę, o wprowadzeniu Thread.sleep() w obydwu wątkach, ale może jest jakieś inne rozwiązanie?

Pozdrawiam.