Я пытаюсь написать клиент для Android, который должен взаимодействовать с приложением ПК-сервера в локальной сети. Приложение сервера написано моим другом в C#. В настоящее время есть приложение для iPhone, которое использует это серверное приложение без проблем.Проблема TCP - зависает при чтении ответа сервера
У меня есть очень простой код для TCP клиента:
1. Socket s = new Socket(server, port);
2. OutputStream out = s.getOutputStream();
3. PrintWriter output = new PrintWriter(out);
4. output.println("ACTION=Next&VALUE=0&");
5. BufferedReader input = new BufferedReader(new nputStreamReader(s.getInputStream()));
6. String st = input.readLine();
Я прошел через множество примеров реализации TCP, и все они похожи. Очень похоже на мой код выше. Мое приложение зависает в строке 6, когда я пытаюсь прочитать ответ с сервера. Это не вызывает ошибок (исключений нет), ничего не отображается в отладчике, а просто ошибка времени ожидания через некоторое время. Сервер должен возвращать строку после выполнения моего действия в строке 4. Я не понимаю, почему этот код зависает. Вход не равен NULL (я проверил его). Я бы ожидал, что будет выбрано какое-то исключение или просто пустая строка для возврата.
Итак? Что мне не хватает? Может быть, проблема с некоторыми специальными символами, которые отправляет серверное приложение, и андроид не может справиться с этим? Нужно ли мне специальное разрешение в моем манифесте?
Я уверен, что у меня есть правильный IP-адрес и правильный номер порта. Я вижу это на серверном приложении, запущенном на моем ПК.
Спасибо.
Does readLine() ждет символа новой строки? Предполагается ли сервер отправлять новую строку? – Slartibartfast
Спасибо. Это была одна из проблем. В качестве автора терминатора сервера терминалов используется последовательность. Оказывается, было более одной проблемы. В строке 4 мне пришлось заменить все и символы на &, но это не было решением. Кажется, что PrintWriter добавляет что-то к OutputStream, возможно, \ n персонажу или что-то подобное. Серверу это не понравилось, и мои действия были проигнорированы. Я попробовал PrintStream вместо PrintWriter, и это сработало отлично. –
bobetko