Настройте время ожидания запроса сокета в CLDC1.1

Можно ли настроить время ожидания запроса сокета в CLDC версии 1.1? Я проверил различные реализации, но все они существуют только для CLDC версии 1.8. Ниже приведена реализация, которую я попробовал. Первая реализация останавливается из-за поведения блокировки метода InputStream#read. Пока вторая реализация не работает, потому что она останавливает соединение

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;

public class ReadNonblockingMessage extends Thread{

    private final int READ_TIMEOUT = 5000;
    private Thread thread;
    private DataInputStream dis = null;

    public ReadNonblockingMessage(String host, int port) throws IOException {
        SocketConnection connection = (SocketConnection)Connector.open("socket://"+host+":"+port,Connector.READ);
        dis = connection.openDataInputStream();
        //first implementation
        while(true) {
            try {
                System.out.println(readFromStream(dis));
            }
            catch(IOException ex) {
                ex.printStackTrace();
                break;   //exit from infinite loop if we got read timeout
            }
        }
        //second implementation - this works fine for first time. after that connection stop
        while(true) {
            try {
                System.out.println(read(dis));
            }
            catch(IOException ex) {
                ex.printStackTrace();
                break;   //exit from infinite loop if we got read timeout
            }
        }
        start();
    }

    public String read(InputStream is) throws IOException {
            thread = Thread.currentThread();
            return readFromStream(is);
    }

    public void run() {
        try {
            sleep(READ_TIMEOUT);
            if(thread.isAlive()) {
                thread.interrupt();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public final String readFromStream(InputStream inputStream) throws IOException{
        ByteArrayOutputStream result = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) != -1) {  //read is blocking 

            result.write(buffer, 0, length);
        }
        result.close();
        inputStream.close();
        return result.toString();
    }
}

0 ответов

Другие вопросы по тегам