Проверьте тип данных, отправленных / полученных в Java по сети - PullRequest
0 голосов
/ 19 марта 2012

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

В настоящее время с помощью простого чата мне не нужно беспокоиться о типе или данных, которые отправляются или принимаются / отправляются пользователем. Но с возможностью передачи файлов я должен знать, какой тип данных (будь то файл или простой текст) отправляется, так что если это простой текст, я могу просто показать его пользователю, но с файлом мне нужно открыть JFilechooser или какое-то диалоговое окно для получения или отправки файла. Ниже приведен код на принимающей стороне

try {
        incoming = new BufferedReader(new InputStreamReader(css.getInputStream()));

        String receive = new String();
        String history = "";
        String name = incoming.readLine();
        chatWindow.RemoteField.setText(name);

        do {
            receive = incoming.readLine();
            history = history + "\n" + receive;
            if (receive != null) {
                chatWindow.recm.setText(history);
            } else {
                receive = "BYE";
            }

            //System.out.println("Received Message: "+receive);

        } while (receive.equals("BYE") != true);
    } catch (Exception npe) {
        System.out.println("Error2" + npe);
    }

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

1 Ответ

2 голосов
/ 19 марта 2012

Вам необходимо отправить какое-то значение, которое указывает, каким будет следующий элемент данных. Например, каждой текстовой строке может предшествовать значение TEXT\n, а для каждого файла FILE:nnn\n, где \n - символ новой строки, а nnn - размер файла в байтах, поэтому вы знаете, какая часть Поток для чтения, прежде чем ожидать еще один TEXT или FILE маркер.

UPDATE

Например, ваш входящий поток может выглядеть так:

TEXT
Hey mate, here's some cool file
FILE:10
1234
56789TEXT
Did you get it ok?

Я предполагаю, что сообщение чата будет только одной строкой текста. Кроме того, файл не должен заканчиваться возвратом строки, потому что число байтов уже известно, 10 в примере выше (включая символ новой строки между 4 и 5). Содержимое файла здесь:

1234
56789
...