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

Потоки

30.01.2014, 21:59. Показов 602. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такой вопрос... Пишу программу клиент-сервер.
Вроде как бы все понятно, есть клиент, есть сервер, через сокет клиент связался с сервером. НО! Что если я хочу много клиентов, которые независимо друг от друга будут делать ряд операций... Для примера, тыкать кнопочки в обычном деалоговом окне...
Сталкнулся с проблемой, а как сделать эти самые потоки, и как потом завершить определенный поток после ухода N-го клиента...
Код клиента (не весь, а та часть, которая отвечает за подключения к серверу):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Пошло подключение к серверу.
         int serverPort = 65534; // здесь обязательно нужно указать порт к которому привязывается сервер.
         String address = "127.0.0.1"; // это IP-адрес компьютера, где исполняется наша серверная программа. 
         
         try{
             
             InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
             Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
             
             OutputStream sout = socket.getOutputStream();
             DataOutputStream out = new DataOutputStream(sout);
             
             String line = null;
             line = message.getLogin();
             out.writeUTF(line);
             out.flush();
             
         } catch (Exception x) {
                x.printStackTrace();
         }
Сервер:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.net.*;
import java.io.*;
 
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
import java.awt.*;
 
import javax.swing.*;
 
public class main extends Thread{
 
    //private String msg;
    
    
    public static void main(String[] args) throws IOException  {
        
    //Сервер!
        LoginPanel message = new LoginPanel();
        int i = 0;
        int port = 65534; // случайный порт (может быть любое число от 1025 до 65535)
            
        ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
        try{
            while(true){
            System.out.println("Waiting for a client...");
            Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
            
            
            
            InputStream sin = socket.getInputStream();
            DataInputStream in = new DataInputStream(sin);
            
            String line = null;
            line = in.readUTF();
            
            System.out.println("Зашел пользователь с ником '" + line + "' и порядковым номером '" + ++i + "'");
            System.out.println();
            //Действия
            int windowAutorization = JOptionPane.showOptionDialog(null, message, "Проверка", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, new Object[] {"Вход", "Регистрация"}, "Вход");
            if (windowAutorization == JOptionPane.NO_OPTION){
                JOptionPane.showMessageDialog(null,
                        " Нажал Регестрацию",
                        "Проверка нажатия кнопки",
                        JOptionPane.ERROR_MESSAGE);
            }else{
                JOptionPane.showMessageDialog(null,
                        " Нажал Вход",
                        "Проверка нажатия кнопки",
                        JOptionPane.ERROR_MESSAGE);
            }
            }
            
        }catch(Exception x) { x.printStackTrace(); }
        
        
      }
    private static class LoginPanel extends JPanel {
         
        public JTextField login;
        private JPasswordField password;
 
        public LoginPanel() {
            GridBagLayout l = new GridBagLayout();
            l.columnWeights = new double[] {.4, 1};
            setLayout(l);
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 30;
            gbc.anchor = GridBagConstraints.WEST;
            add(new JLabel("Логин:"), gbc);
            gbc.gridy = 1;
            add(new JLabel("Пароль:"), gbc);
 
            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.fill = GridBagConstraints.BOTH;
            login = new JTextField();
            add(login, gbc);
 
            password = new JPasswordField();
            gbc.gridy = 1;
            add(password, gbc);
            
        }
 
        public String getLogin() {
            return login.getText();
        }
        public String getPassword() {
            return new String(password.getPassword());
        }
    }
        
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2014, 21:59
Ответы с готовыми решениями:

Потоки
Здравствуйте, хочу создать программу которая реализует потоки. Программа выполняет различные действия(небольшой алгоритм), каждое действие...

Потоки
Всем привет, не буду разглагольствовать и перейду сразу к делу:): Изучаю java, дошел до потоков и тут возник такой вопрос: при...

Потоки CountDownLatch
Всем доброго времени суток. Есть маленький вопрос про потоки... Изучая тему про счетчики CountDownLatch немогу понять одну вещь. Вот...

2
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
31.01.2014, 00:07
У вас в примере нет никаких потоков кроме main(), класс который наследует от Thread должен иметь метод run(), что бы запустить run() как отдельный поток, нужно вызвать для вашего класса метод start(). Прервать поток можно методом interrupt() или сделать return в методе run()
http://docs.oracle.com/javase/... hread.html
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
31.01.2014, 09:08
Apelsin199, В инетрнете полно примеров многопоточных сетевых серверов, например вот - http://tutorials.jenkov.com/ja... erver.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2014, 09:08
Помогаю со студенческими работами здесь

Закрыть потоки
День добрый, не получается закрыть потоки в приложении через меню, кто знает как исправить буду благодарен. Game.java import...

Потоки Java
Как выводить текст через System.out.println() и System.err.println() поочередно? Был вариант: for(String w : list){ ...

Потоки/Синхронизация
Всем доброго времени суток. Самостоятельно пытаюсь изучить Java. Занимаюсь по книге Шилдта(Java 8). Дойдя до потоков у меня возник...

Не хотят работать ПОТОКИ
В чем подвох? написал вроде все правильно, она должна копировать файл/ А вместо этого почему то дико ругается в множестве местах ...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru