запись сокета android прерывая чтение - PullRequest
1 голос
/ 02 февраля 2012

Используя Android 2.3.3, у меня есть фоновый сервис, который имеет сокетное соединение.Есть поток, который постоянно читает из сокета:

BufferedReader in = new BufferedReader(new InputStreamReader(mSock.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
    ... do stuff
}
// Socket has been closed (?)
in.close();

А затем в моем основном потоке я вызываю:

private void writeSocket(String line) {
    mSock.getOutputStream().write(line.getData("US-ASCII"));
}

Когда я вызываю writeSocket, write () не выдаетисключение, но я не вижу данных на другом конце, и in.readLine () в потоке чтения сразу возвращает null, когда происходит write ().Из того, что я прочитал, должно быть безопасно читать и писать одновременно с одним и тем же сокетом из разных потоков?Кажется, что запись вызывает закрытие сокета, но я не получаю исключение ..

1 Ответ

1 голос
/ 02 февраля 2012

Скорее всего, другой конец соединения был нормально закрыт. Это приводит к завершению как read, так и write. (Обычно, поэтому не исключение. Это все равно что пытаться читать после конца файла.) Вы можете читать и писать одновременно из разных потоков, и, если сокет закрывается, обычно или в исключительных случаях, обе операции завершатся неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...