데이터를 Java 서버로 보내는 Android 클라이언트가 있습니다. 일부 서버 프로세스가 끝나면 서버가 클라이언트에 응답하기를 원하지만 작동하지 못합니다.Android 클라이언트가 서버 응답을받지 못합니다.
처음에는 클라이언트와 서버가 모두 readLine()
에 머물렀으므로 두 클라이언트 모두에 \n
을 추가했지만 변경 사항은 없습니다. 여기에 긴 검색 후 클라이언트 연결을 닫으려고했습니다 다음 서버가 실행되지만 소켓이 닫혀 있기 때문에 클라이언트가 오류를 제공합니다. 올바른 방법과 이유는 무엇입니까?
클라이언트 코드 :
private class sendToServer extends AsyncTask<JSONObject, Void, String> {
@Override
protected String doInBackground(JSONObject... userData) {
Socket clientSocket;
try {
clientSocket = new Socket("10.0.2.2", 7878);
BufferedOutputStream outToServer = new BufferedOutputStream(clientSocket.getOutputStream());
outToServer.write((userData[0].toString() + '\n').getBytes());
outToServer.flush();
BufferedReader inFromServer = new BufferedReader(new Inpu tStreamReader(clientSocket.getInputStream()));
String reply = inFromServer.readLine();
outToServer.close();
Log.d("",reply);
inFromServer.close();
clientSocket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
서버 코드 :
@Override
public void run() {
try {
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
while ((line = inFromClient.readLine()) != null)
builder.append(line);
BufferedOutputStream outToClient = new BufferedOutputStream(connection.getOutputStream());
outToClient.write(("ACK" + '\n').getBytes());
outToClient.flush();
inFromClient.close();
putToClient.close();
parseIncomingData(builder.toString());
} catch (Exception e) {
System.out.println(e);
} finally {
try {
connection.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
예, 한 줄만 읽으면 작동합니다. 고맙습니다. – user3339411