因为 Bonjour 是苹果公司的私有协议,所以 Android 系统不支持直接使用 Bonjour 服务。但是,Android 系统可以通过安装第三方库来实现 Bonjour 服务的功能。

在 iOS 中,使用 Bonjour 服务通信的代码如下所示:

  1. 创建 NSNetServiceBrowser 对象并设置代理。
NSNetServiceBrowser *browser = [[NSNetServiceBrowser alloc] init];
[browser setDelegate:self];
  1. 开始浏览服务器。
[browser searchForServicesOfType:"_http._tcp" inDomain:@""];
  1. 实现 NSNetServiceBrowserDelegate 协议方法。
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    [aNetService setDelegate:self];
    [aNetService resolveWithTimeout:5.0];
}

- (void)netServiceDidResolveAddress:(NSNetService *)sender
{
    NSData *address = [[sender addresses] objectAtIndex:0];
    struct sockaddr_in *socketAddress = (struct sockaddr_in *)[address bytes];
    NSString *ipAddress = [NSString stringWithFormat:"%s", inet_ntoa(socketAddress->sin_addr)];
    NSInteger port = [sender port];
    // 使用 ipAddress 和 port 连接服务器
}

在 Android 中,可以使用第三方库 jmdns 实现 Bonjour 服务的功能。使用 jmdns 的代码如下所示:

  1. 在 build.gradle 文件中添加 jmdns 库的依赖。
dependencies {
    implementation 'org.jmdns:jmdns:3.5.1'
}
  1. 创建 JmDNS 对象并注册服务。
JmDNS jmdns = JmDNS.create();
ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.local.", "example", 80, "path=index.html");
jmdns.registerService(serviceInfo);
  1. 搜索服务并获取服务的信息。
JmDNS jmdns = JmDNS.create();
ServiceInfo[] serviceInfos = jmdns.list("_http._tcp.local.");
for (ServiceInfo serviceInfo : serviceInfos) {
    String ipAddress = serviceInfo.getHostAddress();
    int port = serviceInfo.getPort();
    // 使用 ipAddress 和 port 连接服务器
}

需要注意的是,在 Android 中使用 jmdns 库时,需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

以上是 iOS 和 Android 使用 Bonjour 服务通信的代码,希望对您有所帮助。

iOS 和 Android 使用 Bonjour 服务通信的代码示例

原文地址: https://www.cveoy.top/t/topic/lHCx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录