Я пытаюсь создать простой Java-клиент для подключения к порту 5223 сервера присутствия (Openfire). Документы сервера присутствия говорят мне, что этот порт поддерживает только безопасные соединения TLS.
Поэтому я пытаюсь подключиться к порту 5223, используя приведенный ниже код.
SSLSocketFactory factory=(SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket= (SSLSocket)factory.createSocket("host",5223);
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
writer.write("some data");
writer.flush();
char r0[]= new char[600];
reader.read(r0);
System.out.println(r0);
Это работало нормально, и я мог видеть, что (в wireshark) данные, которые я отправил, а также полученный ответ, были зашифрованы.
Затем я попробовал приведенный ниже код
Socket socket=new Socket("host", 5223);
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
writer.write("some data");
writer.flush();
char r0[]= new char[600];
reader.read(r0);
System.out.println(r0);
Удивительно (для меня) это тоже работает. Единственная проблема в том, что вначале я получил неожиданный ответ размером 7 байт. Но когда я пропустил этот ответ, все остальные ответы, кажется, работают нормально, и я даже увидел, что данные зашифрованы (с помощью wireshark).
Я сбит с толку. Если класс Socket сам по себе может обеспечить защищенную связь, то зачем нам использовать класс SSLSocket.
Любая помощь приветствуется.