Не получать окончательные данные из потока - PullRequest
2 голосов
/ 21 марта 2012

В настоящее время я не получаю последний объект из моего потока объектов, пока с сервера не будет отправлен другой набор данных.Отправленные объекты имеют либо 1,2, либо 3 int, чтобы указать, являются ли они первым средним или последним пакетом.Я отправил эти объекты в массив и проанализировал это в отладчике, он показывает, что последний пакет не проходит до тех пор, пока первый не будет отправлен снова.

Это код сервера:

public void telleveryone(Object message){
    Iterator it = clientOutputStream.iterator();
    while(it.hasNext()){
        try{

            ObjectOutputStream everyone = (ObjectOutputStream)it.next();
            everyone.writeObject(message);
            everyone.flush();

        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

}

Это код получения на клиенте:

public void run() {

    try{
        sock = new Socket("10.42.34.46", 1337);

        InputStream is = sock.getInputStream();

        ois = new ObjectInputStream(new BufferedInputStream(is));

        OutputStream os = sock.getOutputStream();

        oops = new ObjectOutputStream(os);

        while(true){

                serverDraw =   (com.DrawTastic.Drawring) ois.readObject();

                test.add(serverDraw);

        }


    }catch(IOException ex){
        ex.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Вам необходимо очистить заголовок :

вызывающие абоненты могут захотеть очистить поток немедленно, чтобы гарантировать, что конструкторы для получения ObjectInputStreams не будут блокироваться при чтении заголовка

oops = new ObjectOutputStream(os);
oops.flush();
0 голосов
/ 21 марта 2012

Я не перечитал код полностью, но столкнулся с этой проблемой с Python.Я заметил, что многие мои команды серверу не выполнялись, пока моя программа снова не пропинговала сервер.Мое решение состояло в том, чтобы в конце каждой команды на сервере была новая строка, или вы могли очистить буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...