Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 2
Регистрация: 30.09.2013
Сообщений: 89

Задача из Герберта Шилдта

30.09.2015, 19:32. Показов 2407. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, читаю Шилдта. Возник вопрос по задаче. Глава 20 "Сеть". Работа с дейтаграммами. Открываю две командные строки(сервер-клиент). Что ввожу в одной, то выводится в другой, все норм. Но почему-то switch не так работает как я ожидал. Как я понял когда ввожу "-1", то должно вылезти сообщение и закрыться сервер, когда \n, то у клиента должен отобразиться массив. Но почему-то ничего не закрывается и не отображается. Просто вылазит строка у клиента которую ввел у сервера. Объясните пожалуйста почему так? Спасибо.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.net.*;
 
 
 
public class Asdor
{
    public static int serverPort = 998;
    public static int clientPort = 999;
    public static int buffer_size = 1024;
    public static DatagramSocket ds;
    public static byte[] buffer = new byte[buffer_size];
 
    public static void TheServer() throws Exception {
        int pos = 0;
        while(true) {
            int c = System.in.read();
            switch(c) {
                case -1:
                    System.out.println("Серве заершил работу!");
                    return;
 
                case '\r':
                    break;
                case '\n':
                    ds.send(new DatagramPacket(buffer, pos, InetAddress.getLocalHost(), clientPort));
                    pos=0;
                    break;
                default:
                    buffer[pos++] = (byte)c;
            }
        }
    }
 
    public static void TheClient() throws Exception {
        while(true) {
            DatagramPacket p = new DatagramPacket(buffer, buffer.length);
            ds.receive(p);
            System.out.println(new String(p.getData(), 0, p.getLength()));
        }
    }
 
 
    public static void main(String[] args) throws Exception
    {
      if(args.length == 1) {
          ds = new DatagramSocket(serverPort);
          TheServer();
      } else{
          ds=new DatagramSocket(clientPort);
          TheClient();
      }
 
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2015, 19:32
Ответы с готовыми решениями:

Непонятная задача на массивы из книги Герберта Шилдта
Решил заняться изучением C++. Для этих целей купил себе книгу "C++ для начинающих. Шаг за шагом" автора Герберта Шилдта (2011 год). В...

Книги Герберта Шилдта
Здравствуйте! Закончил 1 курс, по программированию на С++ остановились на классах, наследовании и пр. для дальнейшего изучения языка хочу...

Опечатка в книге Герберта Шилдта
Как исправить? using System; using System.Linq; class WhereDemo2 { static void Main() { string strs = { ".com", ".net",...

6
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.09.2015, 23:24
Нет, вы не правильно поняли.
Когда InputStream возвращает -1 - это значит, что поток закрыт/закончился. Например, если бы вы читали данные из файла, -1 вернулся бы тогда, когда вы прочитали файл до конца.
В случае же System.in, насколько я знаю, -1 не вернётся никогда (без хитрых приседаний).
1
1 / 1 / 2
Регистрация: 30.09.2013
Сообщений: 89
01.10.2015, 18:30  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Нет, вы не правильно поняли.
Когда InputStream возвращает -1 - это значит, что поток закрыт/закончился. Например, если бы вы читали данные из файла, -1 вернулся бы тогда, когда вы прочитали файл до конца.
В случае же System.in, насколько я знаю, -1 не вернётся никогда (без хитрых приседаний).
Вот то что вы сейчас написали, это я понял, спасибо. Но вот я тогда не могу понять, как работает в этой задаче switch. Зачем он вообще здесь? Тип переменной C не лучше было бы как char сделать? Если не трудно, объясните пожалуйста.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.10.2015, 21:12
dispetch, я тоже не вижу смысла в ветке case -1
1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
02.10.2015, 06:30
Цитата Сообщение от turbanoff Посмотреть сообщение
я тоже не вижу смысла в ветке case -1
А если подумать?

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
public class Launcher {
    public static void main(String[] args) throws Exception {
        int ch = -1;
        while ((ch = System.in.read()) != -1) {
            System.out.println("ch = " + (char)ch);
        }
        System.out.println("ch == -1: " + (ch == -1));
    }
}
1. Ctrl + C
2. echo abc | java Launcher
0
1 / 1 / 2
Регистрация: 30.09.2013
Сообщений: 89
02.10.2015, 21:32  [ТС]
Цитата Сообщение от aleksandy Посмотреть сообщение
А если подумать?
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
Выделить код
1
2
3
4
5
6
7
8
9
public class Launcher {
public static void main(String[] args) throws Exception {
int ch = -1;
while ((ch = System.in.read()) != -1) {
System.out.println("ch = " + (char)ch);
}
System.out.println("ch == -1: " + (ch == -1));
}
}
1. Ctrl + C
2. echo abc | java Launcher
А не могли бы вы объяснить? Ато я еще видимо не дорос до этого В этом случае введя любую строку она разбивается на отдельные символы и выводится на экран. -1 никогда не будит...?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
05.10.2015, 07:52
Я вообще-то привёл пример того, что в System.in легко можно получить -1 при побайтном считывании. В качестве примера привёл завершение консольной программы по Ctrl+C или подачу в stdin результатов stdout из предыдущего процесса.

Цитата Сообщение от dispetch Посмотреть сообщение
В этом случае введя любую строку она разбивается на отдельные символы
Для ASCI-символов да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2015, 07:52
Помогаю со студенческими работами здесь

Куплю книгу Герберта Шилдта C# 4.0 !
Куплю книгу Герберта Шилдта C# 4.0 ! пишите в личку! о цене договоримся! г.Москва.

Код из книги Герберта Шилдта
Что тут происходит bool p=false, q=false; int i, j; for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { if(i==0) p = true; ...

Не работает программа из книги Герберта Шилдта.
При вводе кода из вышеупомянутой книги, выдает 3 ошибки: 1) error C2440: '=' : cannot convert from 'char ' to 'char' 2)error C2446:...

Не работает программа из книги Герберта Шилдта.
Подскажите и мне тоже из этой книги не работает программа. #include<iostream> #include<cstdlib> #include<conio.h> using...

Какую именно книгу Герберта Шилдта стоит прочитать?
Хотел узнать какую именно книгу нужно почитать у такого автора как Г.Шилдт(у него их много по с++)и какие лучше не читать? Плюсом было бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru