Я работаю на мобильном коммуникаторе и после установления соединения с сервером, используя следующий метод (чтобы проиллюстрировать, что я использую StreamConnection , InputStream и OutputStream Я распределяю inputStream и outputStream между двумя отдельными потоками, давайте вызывать их Отправитель и Получатель .
Способ подключения:
private InputStream inputStream;
private OutputStream outputStream;
private StreamConnection connection;
public void connect(String host, String port) throws IOException {
String connectionString = "socket://" + host + ":" + port;
connection = (StreamConnection) Connector.open(connectionString);
inputStream = connection.openDataInputStream();
outputStream = connection.openOutputStream();
}
Поток
Отправитель ожидает появления чего-либо в буфере вывода. Когда выходной буфер пуст, Sender ожидает (вызывая метод wait()
в потоке отправителя). Любой ввод в выходной буфер вызывает метод notify()
в потоке-отправителе.
Receiver поток опрашивает InputStream , используя метод int available()
, и когда есть что получить, он вызывает блокирующий метод int read()
. В разных эмуляторах все работает как брелок и несколько девичей, которые у меня есть под рукой.
Однако есть один телефон, который, кажется, не работает. Когда один поток вызывает available()
или read()
для объекта InputThread , в то время как другой поток вызывает write()
для объекта OutputStream , поток ввода завершается. Все последующие чтения вернут значение -1 , что означает, что InputStream был закрыт.
После массивного гугл-фу я натолкнулся на этот пост на форумах nokia , где обсуждаются односторонние / дуплексные свойства устройства, и это, похоже, относится к устройство у меня проблемы. Обычно (99% времени) вызовы read () и write () могут выполняться одновременно без каких-либо проблем.
Тогда у меня вопрос: кто-нибудь сталкивался с подобными проблемами? Как / вы могли бы решить проблему независимого чтения одного потока, в то время как другой независимо записывает в установленное соединение, чтобы они не вызывали read () или available () при вызове write ()?
Любые указатели в любых направлениях с благодарностью!