Отправить сообщение с использованием сокетов и XMPP - PullRequest
0 голосов
/ 16 апреля 2019

Я изучаю Java Sockets и хочу попробовать реализовать библиотеку XMPP, используя только Sockets, но я не могу понять, как это сделать.Я прочитал RFC, но ничего не понял.

Я хочу реализовать эти функции:

  • Отправка / получение сообщений
  • Статус пользователей
  • Все контакты

Насколько я знаю, это означает, что я могу успешно продолжить отправку сообщений на сервер, но КАК?

public static void main(String[] args) {
        String connect = "<?xml version='1.0'?> "
                + "<stream:stream "
                + "to='jabber.ru' version='1.0' "
                + "xmlns='jabber:client' "
                + "xmlns:stream='http://etherx.jabber.org/streams'>";

        String msg = "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\">";

        try {
            InetAddress address = InetAddress.getByName(host);
            Socket socket = new Socket(address, port);
            socket.setKeepAlive(true);

            OutputStream os = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write(connect);
            bw.flush();
            System.out.println("Message sent to the server : " + connect);

            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String message = br.readLine();
            System.out.println("Message received from the server : " + message);

            bw.write(msg);
            bw.flush();
            System.out.println("Message sent to the server : " + msg);

            is = socket.getInputStream();
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
            message = br.readLine();
            System.out.println("Message received from the server : " + message);

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

Примечание: я не хочу использоватьлюбые библиотеки!Так что Смак и другие не помогают.

1 Ответ

0 голосов
/ 17 апреля 2019

После получения подтверждения переключения на TLS вам необходимо переключить сокет на TLS и больше не использовать открытый текст. Когда вы закончите, вы можете просто открыть поток и начать последовательность переговоров. Сервер отправит ваши функции потока, и вы сможете пройти аутентификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...