日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用

發布時間:2025/3/21 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android的網絡服務發現協議(NSD)可以用于在小范圍的網絡中發現鄰近設備上的某個應用。這對于一些社交網絡、多人游戲類的應用會非常有幫助。

Android的NSD的使用方法大致上分為四種操作:

1. 注冊網絡服務

2.發現網絡服務

3.連接網絡服務

4.注銷網絡服務

使用NSD時一定要注意:

記得在Manifest中加入android.permission.INTERNET權限,不然程序會崩潰。

一. 注冊網絡服務

注冊網絡服務需要兩樣東西: 網絡服務的信息(NsdServiceInfo)和注冊事件監聽器(NsdManager.RegistrationListener)

這兩樣東西齊全后就可以通過:NsdManager.registerService發放來注冊網絡服務了。實例代碼如下:

public void registerService(View view) {

// 注意:注冊網絡服務時不要對端口進行硬編碼,通過如下這種方式為你的網絡服務獲取

// 一個可用的端口號.

int port = 0;

try {

ServerSocket sock = new ServerSocket(0);

port = sock.getLocalPort();

sock.close();

} catch (Exception e) {

Toast.makeText(getApplicationContext(), "can not set port", Toast.LENGTH_SHORT);

}

// 注冊網絡服務的名稱、類型、端口

NsdServiceInfo nsdServiceInfo = new NsdServiceInfo();

nsdServiceInfo.setServiceName("NSD_Test_Program");

nsdServiceInfo.setServiceType("_http._tcp.");

nsdServiceInfo.setPort(port);

// 實現一個網絡服務的注冊事件監聽器,監聽器的對象應該保存起來以便之后進行注銷

nsRegListener = new NsdManager.RegistrationListener() {

@Override

public void onUnregistrationFailed(NsdServiceInfo arg0, int arg1) {

Toast.makeText(getApplicationContext(), "Unregistration Failed", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceUnregistered(NsdServiceInfo arg0) {

Toast.makeText(getApplicationContext(), "Service Unregistered", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceRegistered(NsdServiceInfo arg0) {

Toast.makeText(getApplicationContext(), "Service Registered", Toast.LENGTH_SHORT).show();

}

@Override

public void onRegistrationFailed(NsdServiceInfo arg0, int arg1) {

Toast.makeText(getApplicationContext(), "Registration Failed", Toast.LENGTH_SHORT).show();

}

};

// 獲取系統網絡服務管理器,準備之后進行注冊

NsdManager nsdManager = (NsdManager) getApplicationContext().getSystemService(Context.NSD_SERVICE);

nsdManager.registerService(nsdServiceInfo, NsdManager.PROTOCOL_DNS_SD, nsRegListener);

}

注意:registerService()方法是異步執行的,如果有一定要在服務注冊完畢后才能執行的操作,請在onServiceResgistered事件中執這些操作。

二. 發現網絡服務

要發現附近的網絡服務需要定義一個網絡服務發現時間監聽器,代碼如下:

public void discoverService(View view) {

nsDicListener = new NsdManager.DiscoveryListener() {

@Override

public void onStopDiscoveryFailed(String serviceType, int errorCode) {

Toast.makeText(getApplicationContext(), "Stop Discovery Failed", Toast.LENGTH_SHORT).show();

}

@Override

public void onStartDiscoveryFailed(String serviceType, int errorCode) {

Toast.makeText(getApplicationContext(),

"Start Discovery Failed", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceLost(NsdServiceInfo serviceInfo) {

Toast.makeText(getApplicationContext(), "Service Lost", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceFound(NsdServiceInfo serviceInfo) {

// 發現網絡服務時就會觸發該事件

// 可以通過switch或if獲取那些你真正關心的服務

Toast.makeText(getApplicationContext(), "Service Found", Toast.LENGTH_SHORT).show();

}

@Override

public void onDiscoveryStopped(String serviceType) {

Toast.makeText(getApplicationContext(), "Discovery Stopped", Toast.LENGTH_SHORT).show();

}

@Override

public void onDiscoveryStarted(String serviceType) {

Toast.makeText(getApplicationContext(), "Discovery Started", Toast.LENGTH_SHORT).show();

}

};

NsdManager nsdManager = (NsdManager) getApplicationContext().getSystemService(Context.NSD_SERVICE);

nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD,nsDicListener);

}

三. 連接網絡服務

通過定義一個網絡服務連接時間監聽器來輪詢解析到的網絡服務,可以進一步獲取該網絡服務的地址和端口然后決定是否進行連接,示例代碼:

public void initResolveListener(View view) {

nsResolveListener = new NsdManager.ResolveListener() {

@Override

public void onServiceResolved(NsdServiceInfo arg0) {

// 可以再這里獲取相應網絡服務的地址及端口信息,然后決定是否要與之建立連接。

// 之后就是一些socket操作了

}

@Override

public void onResolveFailed(NsdServiceInfo arg0, int arg1) {

}

};

}

四. 注銷網絡服務

想要注銷網絡服務,應該事先保存和該網絡服務有關的句柄,通過NsdManager.unregisterService和NsdManager.stopServiceDiscovery方法來注銷網絡服務,實例代碼:

public void unregisterService(View view) {

NsdManager nsdManager = (NsdManager) getApplicationContext().getSystemService(Context.NSD_SERVICE);

nsdManager.stopServiceDiscovery(nsDicListener); // 關閉網絡發現

nsdManager.unregisterService(nsRegListener); // 注銷網絡服務

}

原文:http://blog.csdn.net/gophers/article/details/37968501

總結

以上是生活随笔為你收集整理的android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。