我正在使用熱點服務器和客戶端連接在兩臺設備之間使用wifi傳輸數據的應用程序。如何在不關閉輸出流的情況下連續發送和接收數據?
我正在使用以下代碼將數據從客戶端發送到服務器。
OutputStream stream = socket.getOutputStream();
stream.write("".getBytes());
ContentResolver cr = context.getContentResolver();
InputStream is = null;
try {
is = new ByteArrayInputStream(data.getBytes());
} catch (Exception e) {
Log.d("TEST", e.toString());
}
copyFile(is, stream);
這是我的複製文件方法。
public static boolean copyFile(InputStream inputStream, OutputStream out) {
byte[] buf = new byte[1024];
while (true) {
try {
int len = inputStream.read(buf);
if (len != -1) {
out.write(buf, 0, len);
} else {
//out.flush();
//out.close();
return true;
}
} catch (IOException e) {
Log.d("TEST","faaaaaaaaaaaaaaaa::::"+ e.toString());
return false;
}
}
}
而且,這是我的客戶端代碼。
try {
AppFonts.serverSocket = new ServerSocket(8988);
Log.d("TEST", "Server: Socket opened0000000000");
AppFonts.socket = AppFonts.serverSocket.accept();
Log.d("TEST", "Server: connection done0000000000000000");
// OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
String gotData = convertStreamToString(AppFonts.socket.getInputStream());
Log.d("TEST", "Server: Socket Files,,,,,,");
Log.d("TEST", "server: copying files0000000000 " + gotData);
return gotData;
} catch (IOException e) {
Log.e("TEST", "fsat , " + e.getMessage());
e.printStackTrace();
return null;
} catch (Exception e2) {
e2.printStackTrace();
return null;
}
在copyFile()方法中,我嘗試了out.flush(),但數據未在客戶端接收。
-
- 我不想收的OutputStream,因爲我想在兩個設備之間更多的交流。
- 當我使用
out.close();
數據成功發送到客戶端,但沒有使用該數據沒有達到客戶端。 - 服務器從copyFile()方法向客戶端發送數據。從客戶端收到的數據與使用outputstream.close()時發送的內容完全相同。但是當我刪除outputstream.close()時沒有任何反應。或/和使用outputstream.flush();.在看到Android: Socket is closed這個鏈接後,我嘗試了flush()方法。
問題的標題與您的問題無關。你說客戶端沒有收到數據,但服務器不發送任何*數據。另外,你不會說服務器收到了什麼*。 –
服務器從copyFile()方法向客戶端發送數據。從客戶端收到的數據與使用outputstream.close()時發送的數據完全一致;但是當我刪除outputstream.close();或者使用outputstream.flush()時,什麼都不會發生。在看到https://stackoverflow.com/questions/14478450/android-socket-is-closed這個鏈接後,我嘗試了flush()方法。 –
「我正在使用以下代碼將數據從客戶端發送到服務器。」這就是客戶端代碼,對吧?而服務器端代碼是服務器端的一面,你說的*是客戶端,對吧?也許你應該編輯你的問題來澄清它。 –