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

Потоки

30.01.2014, 21:59. Просмотров 437. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2014, 21:59
Ответы с готовыми решениями:

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

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

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

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

2
160 / 156 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
31.01.2014, 00:07 2
У вас в примере нет никаких потоков кроме main(), класс который наследует от Thread должен иметь метод run(), что бы запустить run() как отдельный поток, нужно вызвать для вашего класса метод start(). Прервать поток можно методом interrupt() или сделать return в методе run()
http://docs.oracle.com/javase/... hread.html
0
Эксперт Java
4072 / 3806 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
31.01.2014, 09:08 3
Apelsin199, В инетрнете полно примеров многопоточных сетевых серверов, например вот - http://tutorials.jenkov.com/ja... erver.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2014, 09:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.