05-08-2018, 08:55 AM
(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;
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