Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
IdTCPClient on Android: Connecting to non-active network
#10
(05-07-2018, 06:24 PM)rlebeau Wrote:
Code:
LNetworkInterface := TJNetworkInterface.JavaClass.getByInetAddress(TJInetAddress.JavaClass.getByName(StringToJString('IP Address here')));

That works perfectly, thanks!

But now I get an AV:
Code:
with IdTCPClient1 do
           begin
             {if NetworkData.LocalIP <> '' then
             begin
               BoundIP := NetworkData.LocalIP;
               BoundPort := 8051;
               LocalLog('=== TCPThread.Execute: Connect using BoundIP: '+NetworkData.LocalIP);
             end; }
             try
               if NetworkData.WIFIInterface <> '' then
               begin
                 GStack.CheckForSocketError(
                 Posix.SysSocket.setsockopt(
                   IdTCPClient1.Socket.Binding.Handle,
                   Id_SOL_SOCKET,
                   SO_BINDTODEVICE,
                   M.AsAnsi(NetworkData.WIFIInterface).ToPointer^,
                   Length(NetworkData.WIFIInterface)+1 // assuming the device name uses ASCII chars only
                   )
                 );
               end;
             except
               on E:Exception do LocalLog('TCPThread.Execute: GStack failed: WIFIInterface='+NetworkData.WIFIInterface
                 +' Length(WIFIInterface)='+IntToStr(length(NetworkData.WIFIInterface))
                 +': '+E.Message,d_error);
             end;

             host := NetworkData.DTBActiveServer;
             port := Communications.DTBPort2;
             ConnectTimeout := 10000; // Increased from 5000 to 10000 29-12-2016 v09768
             SARTrackServiceDM.SetDTBConnectStatus(IS_CONNECTPENDING);
             LocalLog('TCPThread.Execute: DTB Client trying connect to ' + host + ' on port ' + IntToStr(port)+' on Interface '+NetworkData.WIFIInterface);

             UAndroidPowerManagement.AcquireWakeLock;
             try
               Connect;
             finally
               UAndroidPowerManagement.ReleaseWakeLock;
             end;
           end;
I get an error:
TCPThread.Execute: Start main loop
ERROR: TCPThread.Execute: GStack failed: WIFIInterface=wlan0 Length(WIFIInterface)=5: Access violation at address 90CC4666, accessing address 00000014

So the interface name seems correct, being "wlan0" and it IS connected. The length shows as "5". I also tried to remove the length "-1" but no difference.
The Delphi debugger does not react to the exception, probably because it is in a thread.


Any idea?

Thanks, Bart
---
Bart Kindt
CEO and Developer
SARTrack Limited
New Zealand
www.sartrack.nz
Reply


Messages In This Thread
RE: IdTCPClient on Android: Connecting to non-active network - by BartKindt - 05-08-2018, 08:55 AM

Forum Jump:


Users browsing this thread: 2 Guest(s)