JAVA TLS SOCKETS : bufferedreader. ready() 始终为 false

标签 java sockets ssl iostream readline

我想使用 TLS 编写小型“聊天”程序

我在使用 SSL 套接字和输入流时遇到问题。 TLS 部分工作正常。

我的问题是:“bufferedreader.ready()”总是返回 false。 如果我删除 teh if -satetmant 如果工作“正常”。程序一直等到出现\n 或\r 并打印到 System.out。但是那个时候我不能发送消息。

“客户”

  InputStream inputstream = System.in;
  InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
  BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

        InputStream inputstream1 = socket.getInputStream();
        InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
        BufferedReader bufferedreader1 = new BufferedReader(inputstreamreader1);

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

        OutputStream outputstream1 = System.out;
        OutputStreamWriter outputstreamwriter1 = new OutputStreamWriter(outputstream1);
        BufferedWriter bufferedwriter1 = new BufferedWriter(outputstreamwriter1);
        //Mitteilen, welchen Kommprofil zum verbindugn genutzt werden soll.
        bufferedwriter.write("bez\n");

        while (true) {

            if (bufferedreader.ready()) {
                bufferedwriter.write(bufferedreader.readLine() + '\n');
                bufferedwriter.flush();
            }
            if (bufferedreader1.ready()) {
                bufferedwriter1.write(bufferedreader1.readLine() + '\n');
                bufferedwriter1.flush();
            }


        }

“服务器”:

 InputStream inputstream = sslsocket.getInputStream();
    InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
    BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

        InputStream inputstream1 = System.in;
        InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
        BufferedReader bufferedreader1 = new BufferedReader(inputstreamreader1);

        OutputStream outputstream = System.out;
        OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
        BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

        OutputStream outputstream1 = sslsocket.getOutputStream();
        OutputStreamWriter outputstreamwriter1 = new OutputStreamWriter(outputstream1);
        BufferedWriter bufferedwriter1 = new BufferedWriter(outputstreamwriter1);



        while (true ) {
            if (bufferedreader.ready()) {
                bufferedwriter.write(bufferedreader.readLine() + '\n');
                bufferedwriter.flush();

            }
            if (bufferedreader1.ready()) {
                bufferedwriter1.write(bufferedreader1.readLine() + '\n');
                bufferedwriter1.flush();

            }

        }

最佳答案

除了调用 readLine() 之外,您在循环中没有其他事情可做,只需调用它即可。它会阻塞直到有东西到达。在这种情况下,或者实际上在任何情况下,您根本不需要调用 ready()。

关于JAVA TLS SOCKETS : bufferedreader. ready() 始终为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468944/

相关文章:

c++ - 如何知道 Boost asio 中 SSL 套接字的状态

java - 如何使用 print ("HelloWorld") 而不是 System.out.println ("Hello World");

java - 如何使用 REST Web 服务将图像存储在 MySQL 数据库中

c++ - 移动 Boost asio TCP 流

c++ - 无法断开和重新连接套接字(C++,winsock2)

c++ - 绑定(bind) falis 以绑定(bind) (TCP) 并返回 -1

ssl - 无法使用 https 启动域

java - Jenkins java.lang.OutOfMemoryError : PermGen space - Facing frequently even after increasing the perm memory

java - iText 中的文本轮廓

iis - Sitecore 多站点 : How to configure SSL for different domain