Android Question [B4A] [SOLVED] Very strange behavior when connected to Wireless AP

Discussion in 'Android Questions' started by Jaco vd Walt, Jul 5, 2019.

  1. Jaco vd Walt

    Jaco vd Walt Member Licensed User

    I hope someone could shed some light on the issue I am having. I created a app which connect to a wifi AP, and then by means of http get a file from the webserver located on the access point. I tried to use a raspi, esp8266, even mikrotik, and getting the same results on all of them, and with 3 different phones (different makes, all android 8). The AP does not have internet. My b4a app would not ping the address of the ap. It would not connect any socket whatsoever. When I disable mobile data on the phone, it works. Now this is all good and well, but here is the strange thing, App with the name PING (apk from the app store, was written in pure java), does not have this problem. So this only happens with my b4a compiled app. It is as if the ping command in shell is trying to resolve the address 192.168.4.1 (the one of the ap) as if it is a named host. In other words, it is as if the app is trying to do a name resolution against the ip address, in stead of just using the ip. That is the one possibility, the other is that the phone is looking for the address on the internet because mobile data is still on. (this option is more plausible). Now this could be because of standard android routing, BUT why is the other app working ?


    I have been struggling a week with this, hopefully what I am saying is making some sense to someone, and can point me in the right direction. I am not very strong on Java btw !

    Thanks !
     
  2. emexes

    emexes Well-Known Member Licensed User

    I don't know the answer, but I'll throw this in as a possible clue:

    Working with the theory that B4A-Bridge has similar network selection/routing challenges, I had a look at its source code and found:
    Code:
    Sub UpdateIp
        CurrentIp = 
    server.GetMyWifiIP
        
    If CurrentIp = "127.0.0.1" Or CurrentIp.Contains(":"Then
            CurrentIp = 
    "Not connected to wireless network."
        
    End If
        FTP_StateChanged
        lblIp.Text = 
    "My IP: " & CurrentIp
    End Sub
    and so perhaps if you follow the GetMyWifiIP trail it might reveal a method of directing network operations to a specific adapter ie wifi.
     
    Jaco vd Walt likes this.
  3. Jaco vd Walt

    Jaco vd Walt Member Licensed User

    Thank you, that is for sure something I could examine further. (I will first see if I get the same results on B4a bride, if not I will dig in the code of bridge :) ), will advise on my findings.
     
  4. Jaco vd Walt

    Jaco vd Walt Member Licensed User

    Thank you so much emexes for helping where you can, its much appreciated. I finally found the problem ! After the initial connection to the ssid, I issue a sleep(5000) command to give the wifi time to establish. This was the culprit. When I refined the code to rather doWhile until it gets the expected ip, and then sleep for 500 ms in the loop (with a timeout counter off course) all works like expected. I am not sure why the sleep breaks it, but that was it. Thanks again !


    This works :

    Code:
    Dim x As Int = 0

            
    For Each result As String In Results
                
    If result.StartsWith("MT2219"Then
                    wiindex = x
               
                
    End If
                x = x + 
    1
            
    Next
            Starter.scan.saveWifiAP(wiindex,
    "NONE","")
            
    Dim retries As Int = 0
            
    Do While Starter.wifi.WifiIpAddress.StartsWith("192.168.43") = False
                
    If retries > 5 Then Exit
                Sleep(
    500)
                retries = retries + 
    1 
            
    Loop
           
            
    Log (Starter.wifi.WifiIpAddress)

            
    Dim p As Phone
            
    Dim sb As StringBuilder
            sb.Initialize
            p.Shell(
    "ping -c 1 192.168.43.1",Null,sb,Null)
            retries = 
    0
            
    Do While sb.ToString.Contains("100% packet loss")
                
    If retries > 10 Then Exit
                p.Shell(
    "ping -c 1 192.168.43.1",Null,sb,Null)
                
    Log(sb)
                retries = retries + 
    1
            
    Loop
    This does not :

    Code:
    Dim x As Int = 0

            
    For Each result As String In Results
                
    If result.StartsWith("MT2219"Then
                    wiindex = x
               
                
    End If
                x = x + 
    1
            
    Next
            Starter.scan.saveWifiAP(wiindex,
    "NONE","")
            Sleep (
    5000)
            p.Shell(
    "ping -c 1 192.168.43.1",Null,sb,Null)
            
    Log(sb)
     
    Last edited: Jul 6, 2019
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice