Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
12 / 12 / 10
Регистрация: 04.06.2017
Сообщений: 99

Чат на сокетах

07.09.2017, 22:07. Показов 1988. Ответов 0

Студворк — интернет-сервис помощи студентам
Питаюсь реализовать чат на сокетах с использованием JavaFX. По неизвестной мне причине метод public static String getMsg() (который я вызываю в строке if(!(string = stageController.getMsg()).isEmpty()) в Client.java) постоянно возвращает пустую строку. Окно состоит из: TextArea, TextField и Button. При нажатии на Button отправляется сооб. на сервер, метод public final void send(ActionEvent actionEvent) обрабатывает это нажатие.
Main.java
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
package main;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import objects.Server;
 
public class Main extends Application {
 
    public static void main(String[] args) {
        Server server = new Server();
        Thread serverThread = new Thread(server);
        serverThread.setDaemon(true); // Теперь этот поток будет завершаться при закрытии главного окна
        serverThread.start();
 
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("../fxml/dialog.fxml"));
        primaryStage.setTitle("Login");
        primaryStage.setScene(new Scene(root));
        primaryStage.setResizable(false);
        primaryStage.show();
    }
}
Client.java
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
package objects;
 
import controllers.stageController;
import java.io.*;
import java.net.Socket;
 
public class Client implements Runnable {
 
    private Socket clientSocket;
 
    public Client(Socket clientSocket) {
        this.clientSocket = clientSocket;
        System.out.println("New client connected.\r\n\tInetAdress: " + clientSocket.getInetAddress());
    }
 
    @Override
    public void run() {
        try(InputStream in = clientSocket.getInputStream();
            OutputStream out = clientSocket.getOutputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(out))) {
 
            stageController sc = new stageController();
            String string;
 
            while(clientSocket.isConnected()) {
                /* По нажатию на кнопку отправлять сообщение серверу */
                if(!(string = stageController.getMsg()).isEmpty()) { // Вот тут я постоянно получаю пустую строку!!!!!!!!!!!!
                    bufferedWriter.write(string);
                    System.out.println("Client has send the message: " + string);
                    stageController.setMsg("");
                }
                /*****************************************************/
 
                /* Принимать сообщение от сервера */
//                if((string2 = bufferedReader.readLine()) != null) {
//                    sc.receive(string2 + "\r\n");
//                    System.out.println("Client received the message");
//                }
                /**********************************/
            }
        } catch (IOException e) {
            System.err.println("IOException in Client class!");
        }
    }
}
Server.java
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
package objects;
 
import java.io.IOException;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
public class Server implements Runnable {
 
    private ServerSocket serverSocket;
    public final static int port = 5555;
    private static Map<String, String> clientInfo = new LinkedHashMap<>();
    private static List<Client>        clientList = new ArrayList<>();
 
    public Server() {
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("Server created.\r\n\tPort: " + port + "\r\n\tInetAdress: " + serverSocket.getInetAddress());
        } catch (IOException e) {
            System.err.println("IOException in server`s constructor");
        }
    }
 
    @Override
    public void run() {
        try {
            while(true) {
                Client client = new Client(serverSocket.accept());
                Thread clientThread = new Thread(client);
                clientList.add(client);
                clientThread.setDaemon(true); // Теперь этот поток будет завершаться при закрытии главного окна
                clientThread.start();
            }
        } catch(IOException e) {
            System.err.println("IOException in Server.run()");
        }
    }
 
    public final static void addClient(String login, String parol) {
        clientInfo.put(login, parol);
    }
 
    public final static boolean isPresent(String login, String parol) {
        return clientInfo.get(login) != null && (clientInfo.get(login)).equals(parol);
    }
}
stageController.java
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
package controllers;
 
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
 
public class stageController {
 
    @FXML
    private TextArea ta;
    @FXML
    private TextField tf;
 
    private static String msg;
 
    static {
        msg = "";
    }
 
    public static void setMsg(String _msg) {
        msg = _msg;
    }
 
    public static String getMsg() {
        return msg;
    }
 
    public final void send(ActionEvent actionEvent) {
        msg = tf.getText();
        tf.clear();
    }
 
    public final void receive(String msg) {
        ta.setText(msg + "\r\n");
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2017, 22:07
Ответы с готовыми решениями:

Чат на сокетах
Начал работу с сетью, пробую написать небольшой чат на tcp сокетах, на стороне сервера всё нормально, он отправляет всем клиентам, но вот...

Консольный чат Клиенты-Сервер на сокетах
При отправки сообщения клиентом, оно приходит только серверу, а как сделать, чтобы оно приходило еще всем клиентам? Сервер: ...

Чат на сокетах
Есть сервер и клиент когда отправляешь сообщение с первого клиента втором то сообщения не появляется у второго клиента а появляется после...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2017, 22:07
Помогаю со студенческими работами здесь

Чат на сокетах
Здравствуйте. Решил написать не большой чат на JAVA. Опыта работы в JAVA немного. Собственно решил сделать 3 класса NetWork - класс в...

Чат на сокетах
Здравствуйте, форумчане. Сейчас занялся написанием чата на сокетах. Всё вроде бы хорошо, но уперся в 1 проблему. Когда один клиент...

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

Чат на сокетах
Я создаю чат на С ++, только такой в котором 1 сервер который как и клиент также может отправлять и принимать сообщения и 1 клиент.И я не...

Чат на сокетах
Здравствуйте, хочу сделать чат на PHP с использованием сокетов. С самими сокетами я познакомился, но есть несколько вопросов: 1) чат...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru