Перейти к содержанию
Fire Monkey от А до Я

msp888

Пользователи
  • Постов

    4
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные msp888

  1. Жаль, что никто не помог...

    Проблему решил.

    Как всегда embarcadero ничего не доводит до конца!

    Обертка для мультиплатформенного сокета (TSocket)  криво работает как под windows так и под android.

    Для работы с Multicast-пакетами под android используйте JMulticastSocket из android api.

  2. Всем привет! 

    У меня уже несколько лет работают приложения под Windows и под Andriod, в которых выполняется обмен данными по локальной сети по протоколу TCP-IP. Теперь вот мне понадобился прием multicast-пакетов по протоколу UDP. Под Windows всё работает замечательно, а вот под Android ничего принять не могу... 

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

    Вот выдержки из кода:

    // переменные
    FSocket:TSocket;
    FiAR:IAsyncResult;  
    FasyncWE:TMultiWaitEvent;
    data:TBytes;
    res:TWaitResult;
    
    WifiLock: JWifiManager_WifiLock;
    MulticastLock: JWifiManager_MulticastLock;
    
    ...
    
    // регистрация в группе
    procedure AddMemberShip(MultiAddr, InterfaceAddr:Cardinal);
    var
      Mreq:ip_mreq;
    begin
      fillchar(Mreq, SizeOf(Mreq), 0);
      move(MultiAddr, Mreq.IMR_MultiAddr.S_addr, SizeOf(Mreq.IMR_MultiAddr.S_addr));
      move(InterfaceAddr, Mreq.IMR_Interface.S_addr, SizeOf(Mreq.IMR_Interface.S_addr));
    
      CheckSocketResult(setsocketoption(FSocket.Handle, IPPROTO_IP, IP_ADD_MEMBERSHIP, Mreq, SizeOf(Mreq)), 'setsockopt:IP_ADD_MEMBERSHIP');
    end;
    
    ...
    
    // permission...
    ACCESS_COARSE_LOCATION
    ACCESS_FINE_LOCATION
    ACCESS_NETWORK_STATE
    ACCESS_WIFI_STATE
    CHANGE_CONFIGURATION
    CHANGE_NETWORK_STATE
    CHANGE_WIFI_MULTICAST_STATE
    CHANGE_WIFI_STATE
    INTERNET
    READ_CALENDAR
    READ_EXTERNAL_STORAGE
    WRITE_CALENDAR
    WRITE_EXTERNAL_STORAGE
    WAKE_LOCK
    
    ...
    
    // настройка wi-fi
    WifiLock.acquire;
    MulticastLock.acquire;
    
    ...
    
    // создание и настройка сокета
    FSocket:=TSocket.Create(TSocketType.UDP);
    FSocket.Bind(TNetEndpoint.Create(ServerIP, ServerPort));
    AddMemberShip(TIPAddress.Create(239, 78, 1, 1).Addr.S_addr,  ServerIP.Addr.S_addr);
    AddMemberShip(TIPAddress.Create(239, 78, 1, 2).Addr.S_addr,  ServerIP.Addr.S_addr);
    AddMemberShip(TIPAddress.Create(239, 78, 1, 78).Addr.S_addr, ServerIP.Addr.S_addr);
    
    
    ...
    // Прием данных в потоке...
      FiAR:=FSocket.BeginReceiveFrom;
      FasyncWE:=FiAR.AsyncWaitEvent;
      res:=FasyncWE.WaitFor;
    
      if res = wrSignaled then
        data:=FSocket.EndReceiveBytesFrom(FiAR); // Прием

     

  3. Если Wi-Fi на телефоне работает в режиме клиента (подключается к внешней точке доступа), то как с ним работать понятно.

    Если же Wi-Fi на телефоне (ОС Android) работает в режиме персональной точки доступа, то как из программы получить свой ip-адрес и другие параметры сети.

    Кто знает, помогите, желательно исходный код на Delphi.

  4. Если Wi-Fi на телефоне работает в режиме клиента (подключается к внешней точке доступа), то как с ним работать понятно.

    Если же Wi-Fi на телефоне (ОС Android) работает в режиме персональной точки доступа, то как из программы получить свой ip-адрес и другие параметры сети.

    Кто знает, помогите, желательно исходный код на Delphi.

     

×
×
  • Создать...