package com.example.jinchao.dimenstest;
import android.app.Activity;
import android.content.Context;
import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private static final int PORT = 5000;
private TextView result;
private Button server;
private Button client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
result = findViewById(R.id.result);
server = findViewById(R.id.refresh);
client = findViewById(R.id.client);
server.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startNSDServer(getApplicationContext(), "jinchao", 56660);
}
});
client.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
discoveryNSDServer();
}
});
}
private NsdManager mNsdManager;
private final String mServerType = "_http._tcp.";
public void startNSDServer(Context context, String serviceName, int port) {
mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName(serviceName);
serviceInfo.setPort(port);
serviceInfo.setServiceType(mServerType);
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, new NsdManager.RegistrationListener() {
@Override
public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
Log.d(TAG, "onRegistrationFailed: ");
}
@Override
public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
Log.d(TAG, "onUnregistrationFailed: ");
}
@Override
public void onServiceRegistered(NsdServiceInfo serviceInfo) {
Log.d(TAG, "onServiceRegistered: info: " + serviceInfo.toString());
}
@Override
public void onServiceUnregistered(NsdServiceInfo serviceInfo) {
Log.d(TAG, "onServiceUnregistered: ");
}
});
}
//发现周边的NSD相关网络
public void discoveryNSDServer() {
mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
mNsdManager.discoverServices(mServerType, NsdManager.PROTOCOL_DNS_SD, new NsdManager.DiscoveryListener() {
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
Log.d(TAG, "onStartDiscoveryFailed: serviceType: " + serviceType);
}
@Override
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
Log.d(TAG, "onStopDiscoveryFailed: serviceType: " + serviceType);
}
@Override
public void onDiscoveryStarted(String serviceType) {
Log.d(TAG, "onDiscoveryStarted: serviceType: " + serviceType);
}
@Override
public void onDiscoveryStopped(String serviceType) {
Log.d(TAG, "onDiscoveryStopped: serviceType: " + serviceType);
}
@Override
public void onServiceFound(NsdServiceInfo serviceInfo) {
Log.d(TAG, "onServiceFound: info: " + serviceInfo.toString());
resoleServer(serviceInfo);
}
@Override
public void onServiceLost(NsdServiceInfo serviceInfo) {
Log.d(TAG, "onServiceLost: info: " + serviceInfo.toString());
}
});
}
public void resoleServer(NsdServiceInfo serviceInfo){
//第一个参数是扫描得到的对象,第二个参数是解析监听对象
mNsdManager.resolveService(serviceInfo, new NsdManager.ResolveListener() {
@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
Log.d(TAG, "onResolveFailed: info: " + serviceInfo + " error: " + errorCode);
}
@Override
public void onServiceResolved(NsdServiceInfo serviceInfo) {
Log.d(TAG, "onServiceResolved: info: " + serviceInfo.toString());
}
});
}
}