Хобрук: Ваш путь к мастерству в программировании

Java SSL Input/Outputstream не работает

Возникла проблема с моими входными/выходными потоками. Подключение клиента к серверу через SSL и попытка отправить сообщение с клиента на сервер.

Однако, когда я пишу в свой выходной поток, на другом конце ничего не читается.

примечание. Я запускаю свой буфер в отдельном потоке с именем sendReceive, чтобы он не блокировал основное приложение в ожидании ввода. Я передаю ему вход SSLSocket, и он потом устанавливает соответствующие потоки/буферы. Я не уверен, что здесь проблема кроется сама по себе.

Вот соответствующая часть моего сервера.

 static void initializeCLAConnection(){
        try {
            SSLServerSocketFactory sslserversocketfactory =
                    (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
            SSLServerSocket sslserversocket =
                    (SSLServerSocket) sslserversocketfactory.createServerSocket(3577);
            SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();

            System.out.println("Connection accepted from: "+sslserversocket.getInetAddress());


            //initialize buffer thread
            sendReceive CLABuf = new sendReceive(sslsocket);
            System.out.println("CLABuf established.");
            CLABuf.start();

Когда вызывается CLABuf.start(), он запускает следующий поток. Здесь он никогда не достигает оператора печати «Получение ввода», независимо от того, сколько раз я пишу в поток.

    public class sendReceive extends Thread{
        InputStream inputstream;
        InputStreamReader inputstreamreader;
        BufferedReader bufferedreader;
        OutputStream outputstream;
        OutputStreamWriter outputstreamwriter;
        BufferedWriter bufferedwriter;

public sendReceive(SSLSocket socket) throws IOException{
     inputstream = socket.getInputStream();
     inputstreamreader = new InputStreamReader(inputstream);
     bufferedreader = new BufferedReader(inputstreamreader);

     outputstream = socket.getOutputStream();
     outputstreamwriter = new OutputStreamWriter(outputstream);
     bufferedwriter = new BufferedWriter(outputstreamwriter);

     System.out.println("CLA Buf established in new thread");
}
@Override
public void run() {
    //listen to inputstream
    String string=null;

    while(this.isAlive()){
         System.out.println("Buf running");

         try {
            while((string=this.bufferedreader.readLine())!=null){
                System.out.println("Thread receiving input!");

             }
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }
}

}

и соответствующая часть моего клиента отправляет msg.

public void initializeVoterToCLA(){
    try {
        /*
         * socket for Voter -> CLA
         */
       SSLSocketFactory sslsocketfactoryCLA = (SSLSocketFactory) SSLSocketFactory.getDefault();
       SSLSocket sslsocketCLA = (SSLSocket) sslsocketfactoryCLA.createSocket("localhost", 3577);

       InputStream inputstreamVoter = sslsocketCLA.getInputStream();
       InputStreamReader inputstreamreaderVoter = new InputStreamReader(inputstreamVoter);
       BufferedReader bufferedreaderVoter = new BufferedReader(inputstreamreaderVoter);

       OutputStream outputstreamCLA = sslsocketCLA.getOutputStream();
       OutputStreamWriter outputstreamwriterCLA = new OutputStreamWriter(outputstreamCLA);
       BufferedWriter bufferedwriterCLA = new BufferedWriter(outputstreamwriterCLA);

       //send msg
       bufferedwriterCLA.write("test msg");
01.05.2015

Ответы:


1

Вы читаете строки, но не пишете строки. Добавьте разделитель строки.

Ничего общего с SSL.

NB Тестирование this.isAlive() бесполезно. Если бы оно было ложным, код, который его проверяет, не выполнялся бы. Этот внешний цикл совершенно бессмысленен. После выхода из внутреннего цикла читать больше нечего. Просто удалите внешний цикл.

02.05.2015
  • Избавился от цикла .isAlive(), а также добавил разделители строк к тому, что я пишу. Ничего не сделал, по-прежнему ничего не получает 02.05.2015
  • Откуда вы знаете, если вы никогда не показываете ничего из этого? 02.05.2015
  • Потому что, если бы он читал строку, он попал бы в оператор печати 02.05.2015
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...