Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java Client Server 
V
    Опции темы
Zoiberg
  Дата 17.4.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.8.2008
Где: Ukraine, Kiev

Репутация: нет
Всего: 1



Добрый день. Пытаюсь написать клиент серверное приложение на Java (лабораторная работа по предмету Java) и столкнулся с такой проблемой. Попытаюсь сейчас описать как можно все подробнее.
Есть GUI состоящий из двух ListBox и кнопки(ее функция отправлять введенные данные на сервер). При нажатии на кнопку я обрабатываю событие ее таким образом:
Код

String name = "";
            try{
                while(name.isEmpty())
                    name = JOptionPane.showInputDialog(mainWindow, "Введіть своє ім'я", "Авторизація", JOptionPane.QUESTION_MESSAGE);
                mainWindow.cModel.addElement(name); // Добавление введенной строки в ListBox1
                mainWindow.sendMessage(new Message(Message.Act.ENTER,name));
                mainWindow.readMessage();
            }catch(NullPointerException exc){}

Отправка данных осуществляется путем передачи объекта класа Message у которого есть два атрибута: key - тип сообщения, value - передаваемый объект серверу.
Код

class Message implements Serializable{
    
    static enum Act {ENTER};
    Act key;
    Object value;
    
    Message(Act key, Object value){
        this.key = key;
        this.value = value;
    }    
        ..................
}

Соответственно методы отправки и чтения клиента:
Код

public void sendMessage(Message msg){
     try {
            this.oos.writeObject(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void readMessage(){
     try {
            msg = (Message)ois.readObject();
            switch(msg.getKey()){
            case ENTER:
                ArrayList<Client> value = (ArrayList<Client>)msg.value;
                clients = value;                
                aModel.addElement(clients.get(clients.size()-1));
                break;
            }            
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }        
    }


На сервере получение сообщения и его обработка осуществляется следующим образом:
Код

...........
           port    = 10240;
            socket  = new ServerSocket(port,10,InetAddress.getLocalHost());
            System.out.println("Server start");
            clientSocket = socket.accept();
            oos    = new ObjectOutputStream(clientSocket.getOutputStream());
            ois    = new ObjectInputStream(clientSocket.getInputStream());
            clients = new ArrayList<Client>();
            while(true){
             msg = (Message)ois.readObject();
             switch(msg.getKey()){
                 case ENTER:
                     this.updateAdmList();
                     break;
             }             
            }
..............
public void updateAdmList(){
     try {            
// Работа ведется с обектом "Банковский клиент" и происходит заполнение его данных и добавление в общий список клиентом типа ArrayList
            account = new Account((int)(Math.random()*100000),(int)(Math.random()*100000));
            cc        = new CreditCard((int)(Math.random()*1000000), true);
            client    = new Client(account,cc,msg.value.toString());
            clients.add(client);
// Записываем сформированый ArrayList в объект типа Message и отправляем его в поток
            msg.setValue(clients);
            oos.writeObject(msg);            
            System.out.println("SERVER: Client "+clients.get(clients.size()-1).toString()+" has connected");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

ПРОБЛЕМА: При отправке сообщения серверу все происходит нормально, сервер нормально обрабатывает первую запись и нормально ее возвращает клиенту. При отправке второго сообщения на сервере все происходит как надо, а вот клиент почему-то уже не получает новый экземляр ArrayList. Тоесть при самом первом чтение сообщения клиент записывает в msg один елемент, при втором чтение сообщения клиент опять записывает в msg один елемент при то что на сервере в поток было записано 2. И я вот не могу понять почему так происходит. Возможно кто-то сможет слету ответить мне на этот вопрос?

PM MAIL   Вверх
Zoiberg
Дата 21.4.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.8.2008
Где: Ukraine, Kiev

Репутация: нет
Всего: 1



Решил простейшим казалось бы способом. После отправки сообщения необходимо сделать потоку reset. Тогда следующий объект уже отправиться с обновленной информацией.

Это сообщение отредактировал(а) Zoiberg - 21.4.2010, 16:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.