Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
1

Сервер - клиент для програмы с MVC и Swing

03.03.2015, 02:39. Показов 1331. Ответов 3

Author24 — интернет-сервис помощи студентам
Доброго времени суток)
Делаю програму, где нужно использовать Swing.
Сделал ее под MVC, написал DAO, Service и т.п., и теперь реализовать сервер-клиент..
Для того, чтобы разобраться с сокетами, создал простую форму, где мы вводим номер порта, и идет подключение к нему, и теперь хочу просто протестировать отправку собщения на сервер и ответ с сервера, но почему то програма зависает и все, вот код:

Простое представление:
Кликните здесь для просмотра всего текста
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
public class Wrapper extends JFrame {
 
    JLabel jLabel1 = new JLabel("Хост: ");
    JLabel jLabel2 = new JLabel("Порт: ");
 
    JPanel jPanel = new JPanel();
 
    JTextField jTextField1 = new JTextField();
 
    JTextField jTextField2 = new JTextField();
 
    JTextArea jTextArea = new JTextArea();
 
    JButton jButton = new JButton("Подключиться");
 
    public Wrapper(){
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 500);
        jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));
 
        jTextField1.setMaximumSize(new Dimension(250, 25));
        jTextField2.setMaximumSize(new Dimension(250, 25));
        jTextArea.setMaximumSize(new Dimension(250, 250));
 
        jPanel.add(jLabel1);
        jPanel.add(jTextField1);
        jPanel.add(jLabel2);
        jPanel.add(jTextField2);
        jPanel.add(new JLabel(" "));
        jPanel.add(new JScrollPane(jTextArea));
        jPanel.add(new JLabel(" "));
        jPanel.add(jButton);
 
        getContentPane().add(jPanel);
    }
 
    public JTextField getjTextField1() {
        return jTextField1;
    }
 
    public JTextField getjTextField2() {
        return jTextField2;
    }
 
    public JTextArea getjTextArea() {
        return jTextArea;
    }
 
    public JButton getjButton() {
        return jButton;
    }
}


Controller:
Кликните здесь для просмотра всего текста
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
public class WrapperController {
 
    //view
    public Wrapper wrapper = new Wrapper();
 
    //TCP
    ServerSocket serverSocket = null;
    Socket clientAccepted = null;
 
    // ввод потока байтов
    ObjectInputStream sois = null;
 
    // вывод потока байтов
    ObjectOutputStream soos = null;
 
    public WrapperController(){
        wrapper.getjTextField1().setText("localhost");
        wrapper.getjTextField1().setEnabled(false);
 
        addButtonListener(wrapper.getjButton());
    }
 
    public void addButtonListener(JButton jButton){
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    if(wrapper.getjTextField2().getText().isEmpty() || wrapper.getjTextField2().getText() == null)
                        JOptionPane.showMessageDialog(null, "ошибка", "Порт", JOptionPane.DEFAULT_OPTION);
                    else {
                        int port = 0;
                        try{
                            port = Integer.parseInt(wrapper.getjTextField2().getText());
 
                            // Создание сокета сервера
                            serverSocket = new ServerSocket(port);
                            wrapper.getjTextArea().append("Сервер запущено....");
 
                            clientAccepted = serverSocket.accept();
                            wrapper.getjTextArea().append("З'єднання встановлено....");
 
                            // Создание потоку ввода
                            sois = new ObjectInputStream(clientAccepted.getInputStream());
                            // Создание потоку вывода 
                            soos = new ObjectOutputStream(clientAccepted.getOutputStream());
 
                            //переводим поток в строку 
                            String clientMessageRecieved = (String) sois.readObject();
 
                            //пока не будет введено слово quite
                            while (!clientMessageRecieved.equals("quite"))
                            {
                                System.out.println("Полученое сообщение: '"
                                        + clientMessageRecieved + "'");
                                soos.writeObject(clientMessageRecieved);// Поток вывода
 
                                // передача клиенту
                                clientMessageRecieved = (String) sois.readObject();// Рядку
                            }
                        } catch (NumberFormatException e1){
                            e1.printStackTrace();
                        } catch (Exception e1){
                            e1.printStackTrace();
                        }
 
                        /**
                         *  Начало клиентской части
                         */
                        System.out.println("Сервер подключено....");
                        Socket clientSocket = new Socket("127.0.0.1", port);
 
                        //создание буферизованого потока
                        BufferedReader stdin = new BufferedReader(new InputStreamReader(
                                System.in));
 
                        // Создание потока вывода
                        ObjectOutputStream coos = new ObjectOutputStream(
                                clientSocket.getOutputStream());
 
                        // Создание потока ввода
                        ObjectInputStream cois = new ObjectInputStream(
                                clientSocket.getInputStream());
 
                        System.out.println("Введите слово: ");
                        String clientMessage = stdin.readLine();
                        System.out.println("Ви ввели: " + clientMessage);
 
                        while (!clientMessage.equals("quite")) {
 
                           // передаем серверу введеные данные
                            coos.writeObject(clientMessage);
 
                            System.out.println("~server~: " + cois.readObject());
 
                            //ввод с клавиатуры
                            clientMessage = stdin.readLine();
                            System.out.println("Ви ввели: " + clientMessage);
                        }
                        coos.close();
                        cois.close();
                        clientSocket.close();
 
                    }
                } catch (Exception e1) {
                } finally {
                    try {
                        sois.close();
                        soos.close();
                        clientAccepted.close();
                        serverSocket.close();
                    } catch (Exception e1) {
                        e1.printStackTrace();
                   }              
                }
            }
        });
    }
}


Main:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
 
            @Override
            public void run() {
                WrapperController wrapperController = new WrapperController();
                wrapperController.wrapper.setVisible(true);
            }
        });
    }
}
Заранее спасибо!)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2015, 02:39
Ответы с готовыми решениями:

Клиент-сервер для игры покер
Всем доброго времени суток, задача написать клиент-сервер и GUI приложение для игры в покер 1х1,...

Что нужно знать для построения схемы клиент-сервер-база данных
Здравствуйте. Я хочу написать небольшое сетевое приложение. Схема такова: Приложение-клиент...

Здраствуйте, пожалуйста сделайте с даной програмы сделать клиент-сервер!
Клиент-сервер

Взаимодействие WinCC с Labview 2013, как сервер-клиент, так и клиент-сервер
Здравствуйте. Интересует информация о взаимодействии WinCC с Labview 2013, как сервер-клиент, так и...

3
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.03.2015, 10:37 2
Цитата Сообщение от 3Doleg Посмотреть сообщение
// Создание сокета сервера
* * * * * * * * * * * * * * serverSocket = new ServerSocket(port);
* * * * * * * * * * * * * * wrapper.getjTextArea().append("Сервер запущено....");
clientAccepted = serverSocket.accept();
* * * * * * * * * * * * * * wrapper.getjTextArea().append("З'єднання встановлено....");
в код особо не вникал но вы сказали что у вас клиент, почему вы серверный сокет создаете? Зависает на accept потому что это блокирующая комманда. Думаю вам стоит почитать как работают сокеты и посмотреть простые примеры.
1
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
03.03.2015, 18:34  [ТС] 3
KEKCoGEN, спасибо, а в моем случае где должен быть код сервера(запуска), и где должен быть код клиента, ну про клиента тут понятно что нужно передавать запрос на сервер и т.п., а вот не лучше сделать запуск самого сервера при старте програмы?
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.03.2015, 22:19 4
3Doleg, вы непоняли смысла задания. Сервер это должна быть отдельная программа и у неё интерфейса вообще недолжно быть. Там должны быть ваши сервисы и DAO объекты
1
03.03.2015, 22:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2015, 22:19
Помогаю со студенческими работами здесь

Java SWING использование MVC
Опираясь на патерн MVC то для элемента JTable моделью является интерфейс TableModel. Что тогда...

Клиент-сервер в один клик!(элемет сервер, клиент)
Вот решил поделиться с вами своей идеей и её реализацией. Всегда написание Сервера и Клиента к...

Организация взаимодействия форм в Java Swing (MVC)
Доброго времени суток, форумчане! Нужно сделать программу для голосования. Краткое...

Клиент-Сервер для БД Access
можно ли базу Access выгрузить в программу написоной на Дельпхи Чтоб данные в ней и остались ?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru