【问题标题】:Java SSL Input/Outputstream not workingJava SSL 输入/输出流不工作
【发布时间】:2015-05-01 21:42:57
【问题描述】:

我的输入/输出流有问题。通过 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();
        }

    }
}

}

以及我的客户发送消息的相关部分。

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");

【问题讨论】:

    标签: java io java-io


    【解决方案1】:

    你正在阅读台词,但你不是在写台词。添加行终止符。

    与 SSL 无关。

    NB 测试this.isAlive() 是徒劳的。如果它为假,则测试它的代码将不会运行。这个外循环完全没有意义。一旦内部循环退出,就没有什么可读的了。只需删除外循环即可。

    【讨论】:

    • 摆脱了 .isAlive() 循环,还在我所写的内容中添加了行终止符。什么都没做,仍然没有收到任何东西
    • 你怎么知道,当你从不显示它时?
    • 因为如果它正在读取一行它会到达打印语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2012-07-19
    • 2012-11-17
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多