Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SocketServer和Socket通信,未收到应答_Java_Sockets - Fatal编程技术网

Java SocketServer和Socket通信,未收到应答

Java SocketServer和Socket通信,未收到应答,java,sockets,Java,Sockets,我制作了一个java服务器套接字。我使用套接字对象向它发送请求。请求被传递到ServerSocket,但响应不会返回 服务器代码: Socket startserver = this.wifiserver.accept(); in = new InputStreamReader(startserver.getInputStream()); BufferedReader read = new Buff

我制作了一个java服务器套接字。我使用套接字对象向它发送请求。请求被传递到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()卡住了。我已经检查了请求是否通过输出行命令is:SNDKEY到达服务器,并且它总是被打印出来。但用户端从未收到密钥

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

out.print("12345678901234567890\n"); 

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

尝试在客户端代码中打印换行符或调用
flush()
刷新输出流,以便服务器可以看到一些数据。您能否将
out.print(…)
更改为
out.println(…)
?@Vikdor您能解释一下吗。你说服务器可以看到一些数据是什么意思?@TomaszNurkiewicz仍然存在同样的问题。bufferStream.readLine()阻塞程序。在遇到换行符、缓冲区容量已满或显式调用flush()之前,不会刷新客户端写入的缓冲区。在没有从客户端刷新内容之前,服务器不会在其缓冲读取器中看到该数据。