Не работают потоки в Android и доступ к LAN

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Не работают потоки в Android и доступ к LAN

Сообщение Aleks69 » 14.08.2015 13:34:49

Приветствую!

Lazarus для Android (сборка laz4android) отлично встал. Но я не могу наладить работу с потоками.

Попробовал создать поток по типу NewThread:=TNewThread.Create(true);
Валится, немедленно.

Делаю BeginThread, указываю ссылку на функцию function TstSend(parameter: pointer): ptrint; - опять немедленное закрытие приложения.

А вот пред история. С чего началось. Люди посоветовали работу с сетью по правилам Android вынести в поток.
--------------------------------------------------------------
Потребовалось сделать простое приложение под Android на Delphi. XE - дороговат.

Поставил соотв. сборку Lazarus - все отлично компилируется, APK-файл на смартфон ставиться (Android 4.xx).

Использую для теста Indy простейшую конструкцию:

IdTCPClient1.Host := '192.168.1.52';
IdTCPClient1.Port:=3424;
IdTCPClient1.Connect;

IdTCPClient1.Socket.WriteLn('test');

if not IdTCPClient1.IOHandler.InputBufferIsEmpty then
IdTCPClient1.IOHandler.InputBuffer.Clear;



Нажимаю на кнопку, получаю сообщение - Socket Error # 88 Socket operation on non-socket.

Под Windows все работает.... Под Android -нет.

В манифесте есть: <uses-permission android:name="android.permission.INTERNET" />

Пробовал при сборке разные версии платформы (8 и 22) - не помогло.

Ладно, ухожу от Indy и ставлю в lazarus пакет Inet. Беру компонент LTCPComponent.
Сервер (из примеров c Inet) что-то получает от моего клиента под Android на том же Inet, при нажатии кнопки на смартфоне
сервер выдает "Connection accepted" по событию onAccept. Да видно и по светодиодам на порту,
что на него что-то приходит. Но при попытке отправить на сервер данные, на сервере возникает ошибка: Connection lost.

А на смартфоне возникает ошибка - Error on connect: connection refused. SSL выключено и на клиенте, и на сервере.
Да, и еще. Когда клиент "подсоединяется" к серверу, события onConnect тем не менее не происходит.

Такое ощущение, что и в Indy, и в Inet уже соединение из-под Android происходит как-то не правильно.
-----------------------------------------------------------

Подскажите, пожалуйста: кто-то смог из Lazarus под Android получить доступ к LAN?
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Не работают потоки в Android и доступ к LAN

Сообщение hinst » 14.08.2015 14:32:49

Эххх........... У меня работали потоки на андроиде. И сеть работала с библиотекой Synapse.
Кроме того, есть подозрение, что в линуксах для входящих TCP-соединений надо root-права; // а для исходящих TCP-соединений не надо

Добавлено спустя 2 минуты 46 секунд:
Моя библиотека, которая использует Synapse и работает на андроиде. Ну, работала, когда я её проверял последний раз. Телефон отправлял логи по сети, комп их принимал

Добавлено спустя 7 секунд:
https://bitbucket.org/hinst/paslog
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Не работают потоки в Android и доступ к LAN

Сообщение Aleks69 » 20.08.2015 18:39:43

hinst

День добрый!

Спасибо за совет. Попробовал Synapse - сразу все заработало без танцев с бубном. Причем в явном виде я даже и потоков не создавал.

Обнаружил интересную вещь. Положил на форму Image (выравнивание по клиенту) с картинкой во всю форму - приложение стало жутко тормозить.

Что это может быть? Постоянный пересчет какой-то что ли...
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 219

Рейтинг@Mail.ru