问题描述: 在使用Android的NSD(Network Service Discovery)功能时,调用registerService方法注册服务时,可能会返回端口为0和主机为空的情况。
解决方法:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// 网络已连接
} else {
// 网络未连接
}
NsdManager nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
NsdManager.RegistrationListener registrationListener = new NsdManager.RegistrationListener() {
@Override
public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
// 注册失败处理逻辑
}
@Override
public void onServiceRegistered(NsdServiceInfo serviceInfo) {
// 注册成功处理逻辑
}
@Override
public void onServiceUnregistered(NsdServiceInfo serviceInfo) {
// 取消注册处理逻辑
}
@Override
public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
// 取消注册失败处理逻辑
}
};
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName("MyService");
serviceInfo.setServiceType("_http._tcp.");
serviceInfo.setPort(1234); // 设置正确的端口号
serviceInfo.setHost(InetAddress.getLocalHost()); // 设置正确的主机地址
nsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);
注意:上述代码示例中设置了固定的端口和主机,实际使用时应根据具体需求进行设置。
通过以上步骤,应该可以解决Android NSD中registerService返回端口0和主机空的问题。