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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клиент сервер, Клиент и сервер зависают при чтении  
V
    Опции темы
Vitaly333
Дата 5.3.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

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



Начал разбиратся с сокетами. Решил написать простенькое клиент- серверное приложение. Создается сервер и слушает порт. Клиент, подключаясь к серверу, пишет ему сообщение "Hello Server". Сервер его читает и выводит на консоль, после чего пишет клиенту сообщение "Hi Client". Клиент его читает и так же выводит на свою консоль.

Код сервера:

Код

        ServerSocket serverSocket = null; 
        Socket clientSocket = null; 
        BufferedReader reader = null; // читатель из клиентского сокета
        BufferedWriter writer = null; // писатель в клиентский сокет
        
        try {
             serverSocket = new ServerSocket(40000);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        
        System.out.println("Server is create to " + " ip: " + serverSocket.getInetAddress()+ " port: " + serverSocket.getLocalPort());    
        
                                
        try {
            
            System.out.println("Server: Waiting connected client...");
            clientSocket = serverSocket.accept();                    
            InetAddress ipclient = clientSocket.getInetAddress();
            System.out.println("Server: Client " + ipclient + " connected" );
            
            
             reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(),"UTF-8"));                 
             writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream(),"UTF-8"));
            
            
            System.out.println("Server: Reading data... ");
            
            
            // Читаем сообщение от клиента и пишем в консоль                                    
            System.out.println(reader.readLine()); // тут сервер зависает
        
            
            // Пишем сообщение клиенту                    
            writer.write("Server: Hi client ");
            writer.flush();
            
                                            
        } catch (IOException e) {            
            e.printStackTrace();
        }        
        finally{
            try {
                writer.close();
                reader.close();
                clientSosket.close();
                serverSocket.close();                
            } catch (IOException e) {                
                e.printStackTrace();
            }                        
        }
        
    
                    




Код клиента:


Код

Socket client = null;
        BufferedWriter writer = null; // писатель серверу
        BufferedReader reader = null; // читатель с сервера
        
        try {            
            client = new Socket("localhost",40000);
            writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"UTF-8"));
            reader = new BufferedReader(new InputStreamReader (client.getInputStream(),"UTF-8"));
            
            System.out.println("Client connected");
            
            
        // пишем сообщение серверу    
            
            writer.write("Client: Hello server");
            writer.flush();
            
            
        // читаем сообщеение от сервера и пишем его в консоль
            
            System.out.println(reader.readLine());
            
                                            
        } catch (UnknownHostException e) {            
            e.printStackTrace();
        } catch (IOException e) {            
            e.printStackTrace();
        }
        finally{
            try {
                writer.close();
                reader.close();
                client.close();
            } catch (IOException e) {                
                e.printStackTrace();
            }
            
        }


        

В чём дело, почему сервер при чтении данных зависает и как этого избежать?

Это сообщение отредактировал(а) Vitaly333 - 5.3.2009, 16:15
PM MAIL   Вверх
Platon
Дата 5.3.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Цитата

writer.write("Client: Hello server");

BufferedReader#readLine(); - ждет \n или закрытия потока.
PM MAIL ICQ   Вверх
Vitaly333
Дата 5.3.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

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



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

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

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


 




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


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

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