Java SocketServer和Socket通信,未收到应答
我制作了一个java服务器套接字。我使用套接字对象向它发送请求。请求被传递到ServerSocket,但响应不会返回 服务器代码:Java SocketServer和Socket通信,未收到应答,java,sockets,Java,Sockets,我制作了一个java服务器套接字。我使用套接字对象向它发送请求。请求被传递到ServerSocket,但响应不会返回 服务器代码: Socket startserver = this.wifiserver.accept(); in = new InputStreamReader(startserver.getInputStream()); BufferedReader read = new Buff
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()之前,不会刷新客户端写入的缓冲区。在没有从客户端刷新内容之前,服务器不会在其缓冲读取器中看到该数据。