Vizible’s Blog

JmDNS : Service Discovery

Posted in Programming by wearetherock on October 23, 2008

ตัวอย่างนี้ก็มาพร้อมกับ library เหมือนกัน …เพิ่มนิดหน่อยใน serviceAdded()  ,เจอ ฺBug ในบรรทัดที่คอมเมนต์ ได้ ServiceInfo เป็น null ตลอด แก้โดยเรียก getDNS() เพิ่อดึง ServiceInfo แทน

package samples;

import java.io.IOException;
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceInfo;
import javax.jmdns.ServiceListener;

public class DiscoverServices {

    static class SampleListener implements ServiceListener {

        public void serviceAdded(ServiceEvent event) {
            System.out.println("Service added   : " + 
				event.getName() + "." + event.getType());
            
            //ServiceInfo info = event.getInfo();
            //System.out.println(info.getHostAddress());
            
            JmDNS dns = event.getDNS();
            ServiceInfo info = dns.getServiceInfo("_http._tcp.local.", "foo");
            System.out.println("service address :"+info.getHostAddress());
            System.out.println("service name :"+info.getName());
            System.out.println("service port :"+info.getPort());
            System.out.println("service type :"+info.getType());

        }

        public void serviceRemoved(ServiceEvent event) {
            System.out.println("Service removed : " + 
				event.getName() + "." + event.getType());
        }

        public void serviceResolved(ServiceEvent event) {
            System.out.println("Service resolved: " + 
				event.getInfo());
        }
    }

    public static void main(String[] args) {
        try {

            JmDNS jmdns = JmDNS.create();
            jmdns.addServiceListener("_http._tcp.local.", new SampleListener());

            System.out.println("Press q and Enter, to quit");
            int b;
            while ((b = System.in.read()) != -1 && (char) b != 'q');
            jmdns.close();
            System.out.println("Done");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

การค้นหา Service มีเพียงสองขึ้นตอน คือ สร้าง JmDNS , และเรียก addServiceListener() โดยส่งชนิดของ Service ที่ต้องการ + Instance ของคลาสที่อิมพลีเมนต์ ServiceListener เป็นพารามิเตอร์

1. JmDNS jmdns = JmDNS.create()
2. jmdns.addServiceListener(“_http._tcp.local.”, new SampleListener())

ผลลัพท์ (ต้องรันโปรแกรมคู่กับ ServiceRegister อันไหนก่อน/หลังก็ได้)

Press q and Enter, to quit
Service added   : foo._http._tcp.local.
Service resolved: service[foo._http._tcp.local.,/10.80.26.31:1268,17path=index.html]
service address :10.80.26.31
service name :foo
service port :1268
service type :_http._tcp.local.

Advertisements
Tagged with: , ,

2 Responses

Subscribe to comments with RSS.

  1. wearetherock said, on October 28, 2008 at 7:58 am

    เดี๋ยวดี เดี๋ยวร้าย รันได้บ้าง error บ้าง .. เซ็ง

  2. wearetherock said, on October 28, 2008 at 7:58 am

    เดี๋ยวดี เดี๋ยวร้าย รันได้บ้าง error บ้าง .. เซ็ง


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: