我想使用 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/