Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
36 / 3 / 0
Регистрация: 21.05.2018
Сообщений: 111

Как разделить данные, передаваемые сервером клиенту?

03.08.2018, 13:27. Показов 1111. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Изучаю приложения "клиент-сервер". И вот какой возник вопрос. Я написал код сервера, который отправляет время и дату клиенту, а тот показывает их в виде электронных часов. Код следующий:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class DateTimeServer {
    public static void main(String[] args) throws IOException
    {
        ServerSocket server = new ServerSocket(1234);
        System.out.println("Сервер стартовал");
        try
        {
            while (true)
            {
                Socket incoming = server.accept();
                System.out.println("Соединение установлено");
                Runnable r = new ThreadedHandler(incoming);
                Thread t = new Thread(r);
                t.start();
            }
        }finally {
            server.close();
        }
 
    }
}
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
public class ThreadedHandler implements Runnable
{
    Socket incoming;
    public ThreadedHandler(Socket incoming)
    {
        this.incoming = incoming;
    }
    @Override
    public void run()
    {
       try
       {
           Scanner in = new Scanner(incoming.getInputStream());
           DataOutputStream out = new DataOutputStream(new BufferedOutputStream(incoming.getOutputStream()));
           StringBuilder sb = new StringBuilder();
           while (incoming.isConnected())
           {
               LocalDateTime dt = LocalDateTime.now();
               int sec = dt.getSecond();
               int min = dt.getMinute();
               int hour = dt.getHour();
               int day = dt.getDayOfMonth();
               int month = dt.getMonthValue();
               int year = dt.getYear();
               String secString = appendNull(sec);
               String minString = appendNull(min);
               String hourString = appendNull(hour);
               String dayString = appendNull(day);
               String monthString = appendNull(month);
               String yearString = Integer.toString(year);
               String date_time = " "+hourString+":"+minString+":"+secString+"\n"+dayString+"."+monthString+"."+yearString;
               out.writeUTF(date_time);
           }
       }catch (IOException e)
       {
            e.printStackTrace();
       }
    }
    private String appendNull(int time)
    {
        String timeString = Integer.toString(time);
        if (timeString.length()==1)
            timeString = "0"+timeString;
        return timeString;
    }
}
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
public class DataTimeClient extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
 
        StackPane pane = new StackPane();
        Scene scene = new Scene(pane,400,300);
        Label date_time = new Label();
        date_time.setFont(new Font(40));
        Timeline timeline = new Timeline(
                new KeyFrame(Duration.seconds(1),
                        event -> {
                            try {
                                Socket socket = new Socket("localhost",1234);
                                DataInputStream input = new DataInputStream(socket.getInputStream());
                                date_time.setText(input.readUTF());
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();
        pane.getChildren().add(date_time);
        primaryStage.setScene(scene);
        primaryStage.setTitle("DataTime");
        primaryStage.show();
    }
}
Здесь время вместе с датой отправляется одним потоком и выводится в Lable. Но хотелось бы, чтобы дата и время были разъединены. Тогда их можно будет разместить в разных местах на панели. Как развести по потокам эти данные?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.08.2018, 13:27
Ответы с готовыми решениями:

Нужно обработать некоторые заголовки высылаемые сервером клиенту
написал я 4 объекта-Home interface,Remote interface,Bean Class,PrimaryKey class, откомпилял,написал ejb-jar.xml для деплоя было всё ровно,...

Как считывать данные, передаваемые по Ethernet?
Как считывать данные, передаваемые по Ethernet

В чем отличия MySQL от MySQLi или как защитить передаваемые данные
Вообщем сделал небольшую форму аутентификации где данные записываются в БД. Все работает, но где-то я прочел, что mysqli более безопаснее...

2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
03.08.2018, 13:30
а не проще разделять их тут на клиенте, когда придут? распарсил, время отдал одному элементу, дату - другому. или я неправильно тебя понял?
0
36 / 3 / 0
Регистрация: 21.05.2018
Сообщений: 111
03.08.2018, 14:11  [ТС]
Я об этом думал. Пытался сделать, но не получилось. Написал следующее:
(клиент)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Timeline timeline = new Timeline(
                new KeyFrame(Duration.seconds(1),
                        event -> {
                            try {
                                Socket socket = new Socket("localhost",1234);
                                DataInputStream input = new DataInputStream(socket.getInputStream());
                                String[] strings = input.readUTF().split("|");
                                String time = strings[0];
                                String date = strings[1];
                                date_time.setText(time);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }));
(обработчик потока сокета на стороне сервера)
Java
1
String date_time = " "+hourString+":"+minString+":"+secString+"|"+dayString+"."+monthString+"."+yearString;
В окне ничего не появляется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.08.2018, 14:11
Помогаю со студенческими работами здесь

Кириллица при отправке сообщения клиенту сервером
Пишу консольный чат сервер... Споткнулся на кодировке... Между собой клиенты могут общаться нормально... А кириллица отправленная сервером...

Не учитываются данные, передаваемые конструктору
Привет всем жителям этого форума. Делаю тут одну лабораторную.И возникла проблема. При расчете выдает не то знач ение. Я сказал бы...

Реализовать отправку текста сервером клиенту каждые 5 секунд
Помогите пожалуйста, может у кого есть наброски Необходимо реализовать форменное приложение на c#, где сервер, будет каждые 5 секунд...

Получение кода, который был отдан клиенту сервером
Добрый день. Делаю табличку посещений при помощи php. Реализовал получение времени входа на сайт, IP-адреса и страницы, куда пользователь...

CGI. Как получить данные из html формы и отослать данные клиенту в html формате?
Господа помогите с cgi. Никогда этого не делал под VB, а сейчас очень надо. Как получить данные из html формы и отослать данные клиенту в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru