Сокеты предоставляют два однонаправленных «канала» для связи с другим концом: один для чтения данных (InputStream), а другой для отправки данных (OutputStream).
Следовательно, нет опасности в чтении во входном потоке сразу после записи чего-либо в выходной поток.
Во-вторых, запись новых данных в выходной поток не перезаписывает и не заменяет «старый» контент. Содержимое буферизуется до тех пор, пока другое приложение его не прочитает.
В конце концов, прием данных не подтверждается другой стороной, но если после отправки данных вы не получите IOException, вы можете быть уверены, что оно было получено другим приложением.