这两天在写socket通信的时候遇到一个问题,在服务器端使用BufferedWriter.write()和BufferedWriter.flush()向客户端发送信息后,客户端使用BufferedReader.readLine()怎么也读不到数据。后来发现是因为没有在write之后创建新的行,所以客户端的readLine()不能判断行结束,一直在等待服务器发送行结束符,就出现客户端接收不到数据的现象。解决的方法是在write()后newLine(),再flush()客户端就可以了。
ServerSocket server = null;
try {
server = new ServerSocket(AppProvider.PORT, 0);
BufferedReader in;
BufferedWriter out;
while (true) {
Socket client = server.accept();
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
out.flush();
try {
String request = in.readLine();
String response = processMessage(request);
if (response != null) {
out.write(response);
out.newLine();
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
in.close();
out.close();
client.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (server != null && !server.isClosed()) {
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}