iOS 和 Android 使用 Bonjour 服务通信的代码示例
因为 Bonjour 是苹果公司的私有协议,所以 Android 系统不支持直接使用 Bonjour 服务。但是,Android 系统可以通过安装第三方库来实现 Bonjour 服务的功能。
在 iOS 中,使用 Bonjour 服务通信的代码如下所示:
- 创建 NSNetServiceBrowser 对象并设置代理。
NSNetServiceBrowser *browser = [[NSNetServiceBrowser alloc] init];
[browser setDelegate:self];
- 开始浏览服务器。
[browser searchForServicesOfType:"_http._tcp" inDomain:@""];
- 实现 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 的代码如下所示:
- 在 build.gradle 文件中添加 jmdns 库的依赖。
dependencies {
implementation 'org.jmdns:jmdns:3.5.1'
}
- 创建 JmDNS 对象并注册服务。
JmDNS jmdns = JmDNS.create();
ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.local.", "example", 80, "path=index.html");
jmdns.registerService(serviceInfo);
- 搜索服务并获取服务的信息。
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 服务通信的代码,希望对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/lHCx 著作权归作者所有。请勿转载和采集!