Network Service Discovery error detection: loss of service, phone disconnects

I have a problem trying to follow the developer.android.com network instructions.
( http://developer.android.com/training/connect-devices-wirelessly/nsd.html )
I get an error and sometimes my phone goes off.

Below is my code:

package com.example.networking; import java.io.IOException; import java.net.ServerSocket; import javax.sound.sampled.Port; import android.net.nsd.NsdManager; import android.net.nsd.NsdManager.DiscoveryListener; import android.net.nsd.NsdManager.RegistrationListener; import android.net.nsd.NsdManager.ResolveListener; import android.net.nsd.NsdServiceInfo; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.Menu; @SuppressLint("NewApi") public class MainActivity extends Activity { RegistrationListener mRegistrationListener; DiscoveryListener mDiscoveryListener; String mServiceName; NsdServiceInfo mServiceInfo; ServerSocket mServerSocket; int mLocalPort; NsdManager mNsdManager; final String TAG = "---Networking"; final String SERVICE_TYPE = "_http._tcp."; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize a server socket on the next available port. try { mServerSocket = new ServerSocket(0); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Store the chosen port. mLocalPort = mServerSocket.getLocalPort(); registerService(mLocalPort); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void registerService(int port) { // Create the NsdServiceInfo object, and populate it. mServiceInfo = new NsdServiceInfo(); // The name is subject to change based on conflicts // with other services advertised on the same network. mServiceInfo.setServiceName("NsdChat"); mServiceInfo.setServiceType("_http._tcp."); mServiceInfo.setPort(port); mNsdManager = (NsdManager) getApplicationContext().getSystemService(Context.NSD_SERVICE); initializeRegistrationListener(); initializeDiscoveryListener(); mNsdManager.registerService( mServiceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener); mNsdManager.discoverServices( SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener); } public void initializeRegistrationListener() { mRegistrationListener = new NsdManager.RegistrationListener() { @Override public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) { // Save the service name. Android may have changed it in order to // resolve a conflict, so update the name you initially requested // with the name Android actually used. mServiceName = NsdServiceInfo.getServiceName(); Log.d(TAG , "Service name: " + mServiceName); Log.d(TAG , "Port number: " + mLocalPort); } @Override public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) { // Registration failed! Put debugging code here to determine why. Log.d(TAG , "Registration Failed! Error code: " + errorCode); } @Override public void onServiceUnregistered(NsdServiceInfo arg0) { // Service has been unregistered. This only happens when you call // NsdManager.unregisterService() and pass in this listener. Log.d(TAG , "Service unregistered."); } @Override public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) { // Unregistration failed. Put debugging code here to determine why. Log.d(TAG , "Unregistration failed!"); } }; } public void initializeDiscoveryListener() { // Instantiate a new DiscoveryListener mDiscoveryListener = new NsdManager.DiscoveryListener() { // Called as soon as service discovery begins. @Override public void onDiscoveryStarted(String regType) { Log.d(TAG , "Service discovery started"); } @Override public void onServiceFound(NsdServiceInfo service) { // A service was found! Do something with it. Log.d(TAG, "Service discovery success: " + service); if (!service.getServiceType().equals(SERVICE_TYPE)) { // Service type is the string containing the protocol and // transport layer for this service. Log.d(TAG, "Unknown Service Type: " + service.getServiceType()); } else if (service.getServiceName().equals(mServiceName)) { // The name of the service tells the user what they'd be // connecting to. It could be "Bob Chat App". Log.d(TAG, "Same machine: " + mServiceName); } else if (service.getServiceName().contains("NsdChat")){ mNsdManager.resolveService(service, new ResolveListener() { @Override public void onServiceResolved(NsdServiceInfo serviceInfo) { // TODO Auto-generated method stub Log.d(TAG, "Resolving service..."); } @Override public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) { // TODO Auto-generated method stub Log.d(TAG, "Service resolve failed!"); } }); } } @Override public void onServiceLost(NsdServiceInfo service) { // When the network service is no longer available. // Internal bookkeeping code goes here. Log.e(TAG, "service lost: " + service); } @Override public void onDiscoveryStopped(String serviceType) { Log.i(TAG, "Discovery stopped: " + serviceType); } @Override public void onStartDiscoveryFailed(String serviceType, int errorCode) { Log.e(TAG, "Discovery failed: Error code: " + errorCode); mNsdManager.stopServiceDiscovery(this); } @Override public void onStopDiscoveryFailed(String serviceType, int errorCode) { Log.e(TAG, "Discovery failed: Error code: " + errorCode); mNsdManager.stopServiceDiscovery(this); } }; } } 

The problem is visible in the attached image (I'm not sure how to call it). I get duplicate errors.

enter image description here

Can someone explain to me what I'm doing wrong or why am I getting these errors? Do I have to have different ports for registration and opening? (another NsdManager?)

+4
source share
1 answer

Your magazine looks good to me. There is a successful discovery and a successful solution, so continue with the result of the decision.

0
source

Source: https://habr.com/ru/post/1484759/


All Articles