Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Уходит кодировка при получение от Socket в консоль / 10 сообщений из 10, страница 1 из 1
14.10.2016, 09:02
    #39326775
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
Запускаю текст ниже и подключаюсь с консоли telnet-ом, обратно приходит текст жуткими каракулями. Кодировку в консоли утилитой chcp менял и на 65001, и на cp866, и на win1251. Со стороны кода пробовал преобразовывать текст (getBytes()) в win1251 и в cp866. Не получилось. Вместо русских букв то вопросы, то пусто, то еще какая-то фигня.
Подскажите, как сделать нормальное отображение русских букв?
Код: 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.
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] ar)
    {
        int port = 6789; // случайный порт (может быть любое число от 1025 до 65535)
        try {
            ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
            System.out.println("Waiting for a client...");
            while (true) {
                Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
                new Thread()
                {
                    Socket client = socket;

                    InputStream sin = client.getInputStream();
                    OutputStream sout = client.getOutputStream();

                    // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
                    DataInputStream in = new DataInputStream(sin);
                    DataOutputStream out = new DataOutputStream(sout);

                    String line = null;

                    public void run()
                    {
                        System.out.println("Ready to recive and execute commands.");
                        Boolean stop = false;
                        while(!stop) {
                            try {
                                out.writeBytes("Enter command: ");
                                out.flush();
                                line = in.readLine();
                                if(line.equals("")) continue;
                                if(line.toUpperCase().equals("EXIT"))
                                {
                                    stop = true;
                                    in.close();
                                    out.close();
                                    client.close();
                                    break;
                                }

                                System.out.println("Executing command: \"" + line + "\"");
                                try {
                                    String str = executeCommand(line);
                                    System.out.println(str + "\r\n");
                                    out.writeUTF(str + "\r\n");
                                    out.flush();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            } catch (Exception E) {}
                        }
                    }

                }.start();
            }
        } catch(Exception x) {

        }
    }

    public static String executeCommand(String command)
    {
        StringBuffer output = new StringBuffer();

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return output.toString();
    }
}




собственно весь код стыренный с просторов.
Буду рад замечаниям.
...
Рейтинг: 0 / 0
14.10.2016, 09:10
    #39326781
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
в 69 строке вот это "String.valueOf("dsf").getBytes()" лишнее
...
Рейтинг: 0 / 0
16.10.2016, 09:01
    #39327689
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
Несколько дней нет ответов.
Приведенный код не предназначен для бэкдура. Я всего лишь изучаю джаву и решил немного зайти вперед.А если получится, то будет использоваться совсем другой код, для запуска команд на линуксе, естественно только необходимых для получения инфы о служебных состояниях.
...
Рейтинг: 0 / 0
16.10.2016, 09:03
    #39327690
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
Изначально планировался демон, скорей всего к нему и приду
...
Рейтинг: 0 / 0
16.10.2016, 20:39
    #39327834
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
ImperousНесколько дней нет ответов.
Приведенный код не предназначен для бэкдура. Я всего лишь изучаю джаву и решил немного зайти вперед.А если получится, то будет использоваться совсем другой код, для запуска команд на линуксе, естественно только необходимых для получения инфы о служебных состояниях.
У вас куча бестолкового кода. Ваш коментарий про 69ю строку сбивает столку. Мой совет по поводу кодировок только один. Попробуйте понять что это вообще такое. Когда у вас появиться понимание что же такое кодировка, вопросы почему она сломалась отпадут сами собой.

Если что не понятно - конкретизируйте вопрос. Если нужно ревью кода - так и напишите.
...
Рейтинг: 0 / 0
17.10.2016, 09:21
    #39327968
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
BlazkowiczУ вас куча бестолкового кода. Ваш коментарий про 69ю строку сбивает столку. Мой совет по поводу кодировок только один. Попробуйте понять что это вообще такое. Когда у вас появиться понимание что же такое кодировка, вопросы почему она сломалась отпадут сами собой.

Если что не понятно - конкретизируйте вопрос. Если нужно ревью кода - так и напишите.

1) "У вас куча бестолкового кода" - где именно? и какой толковый код?
2) да, странно, была же эта 69 строка с тем текстом что я написал...
3) собственно знаю что такое кодировки, непонятно что имеется в виду.
4) про ревью - конечно интересно, я только изучаю джаву, поэтому избавление от косяков в приоритете.
...
Рейтинг: 0 / 0
17.10.2016, 09:30
    #39327975
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
Imperous1) "У вас куча бестолкового кода" - где именно?

Да, вот же в первом сообщении
19780056

Imperousи какой толковый код?

Тот в котором нет косяков, которых у вас полно.

Imperous2) да, странно, была же эта 69 строка с тем текстом что я написал...

Нам предлагается на форуме считать до 69?

Imperous3) собственно знаю что такое кодировки, непонятно что имеется в виду.

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

Imperous4) про ревью - конечно интересно, я только изучаю джаву, поэтому избавление от косяков в приоритете.
- Пустые catch блоки
- Игнорирование конструкции try with resource
- DataInputStream\DataOutputStream для работы с текстом
- Виндовые переносы строк
- Запуск процессов без вычитки их выхлопа. У вас выхода из waitFor(), вероятно, никогда не будет, потому что процесс будет всегда запущен, потому что ждет когда же из него вывод вычитают.
...
Рейтинг: 0 / 0
18.10.2016, 07:46
    #39328651
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
Blazkowicz,

Можно пример как выглядит толковый код?
...
Рейтинг: 0 / 0
18.10.2016, 08:56
    #39328675
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
ImperousМожно пример как выглядит толковый код?
Можно. Но вам от него пользы будет мало. Для вас я бы посоветовал следующее
https://docs.oracle.com/javase/tutorial/
http://www.javapractices.com/home/HomeAction.do
https://www.manning.com/books/bitter-java
...
Рейтинг: 0 / 0
24.10.2016, 09:59
    #39332538
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уходит кодировка при получение от Socket в консоль
Blazkowicz,спасибо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Уходит кодировка при получение от Socket в консоль / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]