Я реализую этот пример
http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/
, который показывает, как установить связь между сервером и клиентом между двумя телефонами Android. Я получил его на работу, но я хочу немного его изменить. В настоящее время, как программа настроена, клиент отправляет сообщения только на сервер. Я пытался изменить это так, чтобы сервер мог также отправлять клиенту, и клиент мог также слушать. У меня на обоих телефонах работает таймер, который увеличивает счетчик, и я просто хочу, чтобы они обменивались значениями счетчика взад-вперед. Хотя у меня были трудности с этим.
на стороне сервера, после получения сообщения от клиента, я решил добавить принтер
out = new PrintWriter (client.getOutputStream (), true);
и затем в цикле while, где мы читаем ввод от клиента, внутри исполняемого кода, который я добавил просто
out.println ("привет клиент");
код, похоже, не падает, так что, думаю, это хорошо. Итак, теперь я смотрю на стороне клиента.
Я понимаю, что важно запускать код сокета в отдельных потоках, потому что он «блокирует». Однако клиентский код в этом примере, похоже, не использует обработчик, и мне интересно, почему. Я попытался поместить bufferedreader в код клиента, а затем опубликовать новый исполняемый файл, как это делает код сервера. Я помещаю его в тот же блок try catch, в котором у клиента есть свой принтер
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
n=in.readLine();
if(n!=null)
{
handler.post(new Runnable() {
@Override
public void run() {
fromserver.setText(n);
}
});
//
}
Что мне интересно, так это то, что когда это происходит, мой серверный код, который обычно обновляет значения счетчика клиента, которые он получил, и значения его собственного счетчика больше не обновляются. Это говорит о том, что это связано, хотя. Я запрограммировал его так, чтобы он не устанавливал свою текстовую метку, пока не получит сообщение от клиента; это должно означать, что клиент больше не отправляет сообщения. Мне интересно, что я делаю неправильно на стороне клиента.
Повторюсь, я пытаюсь сделать так, чтобы сервер и клиент отправляли информацию туда и обратно. И я думаю, что где-то я должен блокировать поток. Я не уверен. Может кто-нибудь сказать мне, как правильно сделать этот тип обратной связи? Согласно заявлению Питера, я согласен с тем, что могу работать только в локальной сети. У меня есть два телефона, подключенных через беспроводной маршрутизатор.
Спасибо