0

我做了一个java ServerSocket。我使用 Socket 对象向它发送请求。请求被传递到 ServerSocket 但没有返回响应。

服务器代码:

                Socket startserver = this.wifiserver.accept();

                in = new InputStreamReader(startserver.getInputStream());
                BufferedReader read = new BufferedReader(in);
                String request = read.readLine();
                //System.out.println(request);

                if(request.equals("SNDKEY")){
                    System.out.println("Command is: SNDKEY");
                    out = new PrintWriter(startserver.getOutputStream());
                    out.print("12345678901234567890");
                    out.close();

                }

客户代码:

        Socket connection = new Socket( ip, port );
        writeServer = new PrintWriter(connection.getOutputStream());
        inputStream = new InputStreamReader(connection.getInputStream());
        bufferStream = new BufferedReader(inputStream);
        writeServer.print("SNDKEY");


        this.Key = bufferStream.readLine();

问题是程序卡在命令 bufferStream.readLine() 上。我通过输出以下行命令检查了请求是否到达服务器: SNDKEY 并且它总是被打印出来。但是用户端永远不会收到密钥。

4

1 回答 1

1

bufferStream.readLine()阻塞,直到收到换行符。但是在服务器端,您使用 输出PrintWriter.print(),除非您告诉它,否则它不会发送任何换行符。所以客户端永远等待。将 print 更改为 println,或在消息末尾添加换行符:

out.print("12345678901234567890\n"); 

当您不想在协议中使用换行符时,您也可以在读取每个字节或读取特定数量的字节后使用bufferStream.read而不是bufferStream.readLine返回。

于 2012-10-01T14:41:14.840 回答