0 / 0 / 0
Регистрация: 09.12.2023
Сообщений: 1
1

Ошибка "Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 43 path"

09.12.2023, 19:45. Показов 1278. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть задание написать клиент-серверное приложение на Java, которое работает по протоколу UDP, клиент с сервером взаимодействуют через файл JSON, и осуществляется шифрование/дешифрование текста по алгоритму Цезаря. Короче говоря, клиент вводит текст и сдвиг, отправляет, а сервер в идеале ему посылает результат. Сервер у меня запускается, клиент тоже, вот только когда я посылаю с клиента данные, на сервере появляется ошибка "Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 43 path", и всё никакого результата. Помогите пофиксить код, пожалуйста. Не исключаю, что вопрос глупый, а код корявый(
Ниже код программы.
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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import com.google.gson.Gson;
import javafx.application.Application;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
 
public class Server extends Application {
 
    private Button startButton;
    private Button stopButton;
    private DatagramSocket serverSocket;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) throws Exception {
        startButton = new Button("Start");
        stopButton = new Button("Stop");
 
        startButton.setOnAction(e -> {
            startServer();
        });
 
        stopButton.setOnAction(e -> {
            stopServer();
        });
 
        VBox vBox = new VBox();
        vBox.setPadding(new javafx.geometry.Insets(10));
        vBox.setSpacing(10);
        vBox.getChildren().addAll(startButton, stopButton);
 
        Scene scene = new Scene(vBox, 300, 200);
 
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 
    private void startServer() {
        Service<Void> service = new Service<Void>() {
            @Override
            protected Task<Void> createTask() {
                return new Task<Void>() {
                    @Override
                    protected Void call() throws Exception {
                        try {
                            serverSocket = new DatagramSocket(9876);
                            byte[] receiveData = new byte[1024];
                            while (true) {
                                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                                serverSocket.receive(receivePacket);
                                String json = new String(receivePacket.getData());
                                Gson gson = new Gson();
                                Data data = gson.fromJson(json, Data.class);
                                String text = data.getText();
                                int shift = data.getShift();
                                boolean encrypt = data.isEncrypt();
                                String result = encrypt ? encryptCaesar(text, shift) : decryptCaesar(text, shift);
                                sendData(result, receivePacket.getAddress(), receivePacket.getPort());
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
 
                        return null;
                    }
                };
            }
        };
        service.start();
    }
 
    private void stopServer() {
        if (serverSocket != null && !serverSocket.isClosed()) {
            serverSocket.close();
        }
    }
 
    private void sendData(String text, InetAddress IPAddress, int port) {
        try {
            DatagramSocket clientSocket = new DatagramSocket();
            byte[] sendData = new byte[1024];
            sendData = text.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
            clientSocket.send(sendPacket);
            clientSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    private String encryptCaesar(String text, int shift) {
        StringBuilder result = new StringBuilder();
        for (char character : text.toCharArray()) {
            if (Character.isLetter(character)) {
                int originalAlphabetPosition = Character.isLowerCase(character) ? character - 'a' : character - 'A';
                int newAlphabetPosition = (originalAlphabetPosition + shift) % 26;
                char newCharacter = (char) (Character.isLowerCase(character) ? newAlphabetPosition + 'a' : newAlphabetPosition + 'A');
                result.append(newCharacter);
            } else {
                result.append(character);
            }
        }
        return result.toString();
    }
 
    private String decryptCaesar(String text, int shift) {
        return encryptCaesar(text, 26 - shift);
    }
 
    public static class Data {
        private String text;
        private int shift;
        private boolean encrypt;
 
        public String getText() {
            return text;
        }
 
        public int getShift() {
            return shift;
        }
 
        public boolean isEncrypt() {
            return encrypt;
        }
    }
 
 
}
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
 
public class Client extends Application {
 
    private TextField inputTextField;
    private TextField shiftField;
    private Button encryptButton;
    private Button decryptButton;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage primaryStage) throws Exception {
        inputTextField = new TextField();
        shiftField = new TextField();
        encryptButton = new Button("Encrypt");
        decryptButton = new Button("Decrypt");
 
        encryptButton.setOnAction(e -> {
            String text = inputTextField.getText();
            int shift = Integer.parseInt(shiftField.getText());
            sendData(text, shift, true);
        });
 
        decryptButton.setOnAction(e -> {
            String text = inputTextField.getText();
            int shift = Integer.parseInt(shiftField.getText());
            sendData(text, shift, false);
        });
 
        VBox vBox = new VBox();
        vBox.setPadding(new Insets(10));
        vBox.setSpacing(10);
        vBox.getChildren().addAll(inputTextField, shiftField, encryptButton, decryptButton);
 
        Scene scene = new Scene(vBox, 300, 200);
 
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 
    private void sendData(String text, int shift, boolean encrypt) {
        try {
            DatagramSocket clientSocket = new DatagramSocket();
            InetAddress IPAddress = InetAddress.getByName("localhost");
            byte[] sendData = new byte[1024];
            String json = "{\"text\":\"" + text + "\", \"shift\":" + shift + ", \"encrypt\":" + encrypt + "}";
            sendData = json.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
            clientSocket.send(sendPacket);
            clientSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2023, 19:45
Ответы с готовыми решениями:

Синтаксическая ошибка SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Здравствуйте. В консоле отоброжается 2 синтаксические ошибки: Source map error: SyntaxError:...

Ошибка в коде SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
не пойму в чем ошибка вот код header(&quot;Content-Type: application/json; encoding=utf-8&quot;); ...

Постоянная ошибка SyntaxError: JSON.parse: unterminated string at line 1 column 132829 of the JSON data
что бы не делал, нормально в консоле JSON не выводит, нужно раз 20 обновить только тогда выведет...

Ошибка SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
Частично приходится работать с чужим старым кодом, где все работает на 100 из 100. Этот код...

Retrofit 2: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
Здравствуйте всем! Прошу помощи, т.к. много раз упирался в эту проблему, но так ее и не решил...

0
09.12.2023, 19:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2023, 19:45
Помогаю со студенческими работами здесь

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
Всем привет, пытаюсь произвести запрос к обработчику c помощью AJAX, выдает ошибку при парсинге...

JSON.parse: unexpected character at line 1 column 1 of the JSON data
Делаю по данному тутору (18 минута). При отправке &quot;Регистрации&quot; происходит ошибка JSON.parse:...

Код 200 SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Ребята подскажите плиз, пытаюсь добавить форму отправки сообщений на сайт. После отправки выдает...

Retrofit 2. Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 42 path $.data
В приложение использую Retrofit 2, при запросе получаю ошибку: java.lang.IllegalStateException:...

Ошибка "x undefined near line 3 column 3 called from line 3 column 7"
% Функция, которую мы интегрируем function y = f(x) y = log(1+exp(x)); endfunction n = 4; %...


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

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

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