Сокет Android всегда заканчивается таймаутом - PullRequest
2 голосов
/ 22 марта 2012

Я сделал клиентское приложение для Android-сокета 2.3.3. Он отправляет XML-запрос, а затем получает ответ от сервера сокетов cobol.

Приложение работает отлично, моя проблема в том, что, как только мое клиентское приложение прочитало все данные, оно все еще зависает, ожидая ограничения по таймауту по какой-то причине.

Вот код:

Socket socket = new Socket(serverIpAddress, serverPort);
socket.setSoTimeout(2000);

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

String request = ("Some XML Request");
out.println(request);
out.flush();

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Log.d("Nicklas", "Reader Oprettet");
Vector<String> v = new Vector<String>();
int i = 0;
Boolean KeepGoing = true;
while (KeepGoing)
{

    try 
    {
        String lol = in.readLine();
        if (lol == null) { KeepGoing = false; }
        v.add(new String(lol));
        i++;
    }
    catch (Exception e)
    {
        Log.d("NickEEEXX", e.toString());
        KeepGoing = false;
    }                       
} 

Он всегда заканчивается уловом, за исключением «java.net.SocketTimeoutException» - даже если он отправил и получил нужные данные. Это сильно замедляет работу программы.

Я выполняю этот код как метод, а не как поток, потому что мне нужно изменить графический интерфейс в этом разделе.

У кого-нибудь есть идеи, почему он ожидает тайм-аут?

1 Ответ

0 голосов
/ 22 марта 2012

Может быть lol - это не null, когда больше нет данных.Попробуйте проверить пустую строку.

...