Android TCP прочитал несколько строк

Читает ли Android TCP Socket Client еще одну строку ответа??

inputStreamReader = new InputStreamReader(socket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader); 
response = bufferedReader.readLine();
response = bufferedReader.readLine();
Log.i(TAG, "Response :: " + response);

Я не могу прочитать две строки. Потому что мой сервер ответит 200 OK \n Content.......

И контент будет передаваться клиенту каждую секунду, я не хочу каждый раз подключать сокет. Сбд поможет??


person Ian    schedule 12.08.2011    source источник


Ответы (1)


Пример, который будет продолжать читаться до тех пор, пока не будет найдена пустая новая строка:

inputStreamReader = new InputStreamReader(socket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader); 
String line = bufferedReader.readLine(); // add first line
while (line != "")
{
    response += line;
    line = bufferedReader.readLine();
}
Log.i(TAG, "Response :: " + response);
person jgauffin    schedule 12.08.2011
comment
... до тех пор, пока не будет найдена пустая строка ... и здесь происходит сборка заголовков HTTP, которые заканчиваются пустой строкой. Далее следует ответ. - person user207421; 12.08.2011
comment
Нет. В своем примере он скопировал ответ со следующей прочитанной строкой. Я показал ему, как продолжить чтение, пока не будет найден разделитель. И мы понятия не имеем, HTTP это или что-то еще. Чтение HTTP с сокетами делает все слишком сложным, поскольку HTTP-клиент существует в java для Android. - person jgauffin; 12.08.2011
comment
Нет. Голосование против. (1) Вы показали ему, как продолжать чтение, пока не будет найдена пустая строка. Очевидно, вы не понимаете свой собственный код. readLine() читает строку до новой строки, отбрасывает новую строку и возвращает остальное. Если остальное, то это была пустая строка. Это не означает, что в предыдущих строках тоже не было новых строк. Конечно, они сделали. Вот что сделало их линиями. (2) 200 OK появляется в первой строке HTTP-ответа. (3) Ваш код не делает то, что вы сказали, и не отвечает на вопрос ОП. (3) Чтение HTTP с сокетами - это идея ОП, а не моя. - person user207421; 13.08.2011
comment
1. Да, видел. Пустая строка ЯВЛЯЕТСЯ разделителем, так как я перестал ее читать. Используйте самый простой способ добиться чего-то. Использование метода ReadLine было самым простым. 2. Да? 3. Он делает в точности то, что я сказал. 3 (снова). Я не утверждал, что это ваше удостоверение личности. Я просто заявил, что это плохая идея, и нет никаких доказательств того, что он работает именно с HTTP. - person jgauffin; 13.08.2011
comment
Вы описали это как «пример, который будет продолжать читаться, пока не будет найдена новая строка». Это не так. Это пример, который будет читать строки, пока не будет найдена пустая строка. Если вы теперь описываете пустую строку как разделитель, вам следует соответствующим образом отредактировать свой ответ. В настоящее время он не делает то, что написано на банке. Обсуждение HTTP относится к другому месту, поскольку теперь вы согласны, что это не имеет никакого отношения ко мне. - person user207421; 13.08.2011
comment
Любой может увидеть, что пример продолжает читаться до тех пор, пока не будет найдена новая пустая строка, даже если у вас очень мало опыта программирования. Прочтите свой первый комментарий, вы начали говорить о HTTP, НЕ обо мне. Немного забавно, что вы говорите, что все комментарии о том, что я не добавляю слово «пусто» в описание ответа. - person jgauffin; 13.08.2011
comment
Теперь, когда вы, наконец, исправили свое описание, я бы подумал о том, чтобы проголосовать против, если бы он ответил на вопрос ОП, а это не так. - person user207421; 14.08.2011
comment
Спасибо за два ответа на мой вопрос, так подробно. Мой ответ будет примерно таким: Protocol/1.0 200 OK(новая строка здесь) Сервер: MyServer.com(новая строка здесь) ‹?xml version=1.0 encoding=big5?›‹content›abc‹/content›‹/xml›(новая строка здесь) - person Ian; 15.08.2011
comment
строка = bufferedReader.readLine(); Я думаю, что мой клиент ждет в этой очереди. Так что ничего не показывает. - person Ian; 15.08.2011
comment
while (line != ), между прочим, должно быть while(!line.equals()) - person Ian; 15.08.2011
comment
И это нормально, мне нужно изменить ответ сервера еще одной новой строкой, чтобы узнать разделитель. Спасибо вам двоим~ - person Ian; 15.08.2011