2
我有一個Android客戶端,它將數據發送到Java服務器。在某個服務器進程之後,我希望服務器回覆客戶端,但我無法開始工作。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