Я делаю приложение, которое передает данные с помощью Wi-Fi между двумя устройствами, используя сервер точки доступа и клиентское соединение.
Я использую следующий код для отправки данных с клиента на сервер.
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(), но данные не получены на стороне клиента.
--
- Я не хочу закрывать выходной поток, потому что мне нужно больше связи между двумя устройствами.
- когда я использую данные
out.close();
, успешно отправленные клиенту, но без использования этих данных они не достигают клиента. - Сервер отправляет данные клиенту из метода copyFile(). Данные, полученные со стороны клиента, именно то, что отправляется, когда я использую outputstream.close(); но ничего не происходит, когда я удаляю outputstream.close(); или/и использовать outputstream.flush();. Я попробовал метод flush(), увидев Android: сокет закрыт по этой ссылке.
outputstream.close();
, но ничего не происходит, когда я удаляюoutputstream.close();
и/или используюoutputstream.flush();
. Я попробовал метод flush(), увидев stackoverflow.com/questions/14478450/ android-socket-is-closed по этой ссылке. - person Yadav Uttam   schedule 21.09.2017