【发布时间】:2012-10-01 22:41:14
【问题描述】:
我做了一个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 并且它总是被打印出来。但是用户端永远不会收到密钥。
【问题讨论】:
-
尝试在您的客户端代码中打印一个换行符或调用
flush()刷新输出流,以便服务器可以看到一些数据。 -
你能把
out.print(...)改成out.println(...)吗? -
@Vikdor 你能解释一下吗?服务器可以看到一些数据是什么意思?
-
@TomaszNurkiewicz 还是同样的问题。 bufferStream.readLine() 会阻塞程序。
-
在遇到换行符或缓冲区容量已满或显式调用 flush() 之前,客户端写入的缓冲区不会被刷新。在没有从客户端刷新内容之前,服务器不会在其缓冲读取器中看到该数据。