Discovering local server connection via LAN using Android

292 views Asked by At

I am trying to discover local server(apache tomcat) running on http://localhost:8080 through my android device.To achieve that i thought of using jmdns library from heere

but i am really confused about how to proceed with as i don't understand the networking much.

here is the codei have written with little googling but any help would a be a great help.

public class DnssdDiscovery extends Activity {

protected static final String TAG = DnssdDiscovery.class.getSimpleName();
android.net.wifi.WifiManager.MulticastLock lock;
android.os.Handler handler = new android.os.Handler();

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    handler.postDelayed(new Runnable() {
        public void run() {
            setUp();
        }
        }, 1000);

}    /** Called when the activity is first created. */



//  private String type = "_workstation._tcp.local.";_http._tcp.local.
private String type = "_http._tcp.local.";
private JmDNS jmdns = null;
private ServiceListener listener = null;
private ServiceInfo serviceInfo;
private void setUp() {
    android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
    lock = wifi.createMulticastLock("mylockthereturn");
    lock.setReferenceCounted(true);
    lock.acquire();

    try {
        InetAddress Address = InetAddress.getLocalHost(); 
        Log.e("Local :", Address.getHostName());
        jmdns = JmDNS.create(Address);
        jmdns.addServiceListener(type, listener = new ServiceListener() {

            @Override
            public void serviceResolved(ServiceEvent ev) {
                notifyUser("Service resolved: " + ev.getInfo().getQualifiedName() + " port:" + ev.getInfo().getPort());
            }

            @Override
            public void serviceRemoved(ServiceEvent ev) {
                notifyUser("Service removed: " + ev.getName());
            }

            @Override
            public void serviceAdded(ServiceEvent event) {
                // Required to force serviceResolved to be called again (after the first search)
                jmdns.requestServiceInfo(event.getType(), event.getName(), 1);
            }
        });
        serviceInfo = ServiceInfo.create("_http._tcp.local.", "AndroidTest", 8080, "plain test service from android");
        jmdns.registerService(serviceInfo);
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }
}


private void notifyUser(final String msg) {
    handler.postDelayed(new Runnable() {
        public void run() {

    TextView t = (TextView)findViewById(R.id.text);
    t.setText(msg+"\n=== "+t.getText());
        }
        }, 1);

}

@Override
    protected void onStart() {
    super.onStart();
    //new Thread(){public void run() {setUp();}}.start();
}

@Override
    protected void onStop() {
    if (jmdns != null) {
        if (listener != null) {
            jmdns.removeServiceListener(type, listener);
            listener = null;
        }
        jmdns.unregisterAllServices();
        try {
            jmdns.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        jmdns = null;
    }
    //repo.stop();
    //s.stop();
    lock.release();
    super.onStop();
}

}

0

There are 0 answers