Apple的Finder.app能够始终如一地确定使用bonjour的每台物理计算机的确切模型(每个设备类型的图标都是独一无二的:iMac,MacPro,MBP等).他们如何做到这一点以及他们使用什么API?
另外,Bonjour为网络上的所有服务提供名称,服务类型,域和端口 - 但我无法找到有关如何查找设备模型本身的信息.
我正在为我正在开发的iOS项目开发的应用程序中使用Bonjour(确切地说是NSNetServiceBrowser)而不是WiFi.
然而,尽管注意到为什么NSNetServiceBrowser在iPhone OS中找到未发布的服务的优秀响应中提出的问题?我仍然遇到NSNetSericeBrowser的一些困难.
我的设置如下:
但是,我遇到了以下问题: -
我一直遇到的问题很奇怪,因为Bonjour 90%的时间都在工作......只有10%会破坏我的应用程序的可靠性!令人讨厌的是,通过双击主页按钮并强制关闭应用程序,然后重新运行它,可以解决上述所有问题.再次运行后,它总是找到正确的会话或正确发布.
避免这个问题的一种方法是在无线网络发生变化时拆除并重新启动NSNetServiceBrowser ......但这似乎非常混乱和不必要.令人沮丧的是,Bonjour是一个高级API,没有任何实际的调整和测试选项.
我有什么想法可以解决问题1-4?
谢谢!
我想编写一个可以在网络上搜索Bonjour启用设备的C程序.
基本上我们有一个网络IP摄像头,它支持Bonjour协议.我想在C中编写API,可以搜索启用了Bonjour的设备.有没有人有关于我该怎么做的示例代码或建议?
一旦通过DNS-SD发现服务,该主机的地址究竟如何得到解决,是否需要更多的时间/开销?
另外,如果我使用JmDNS或Bonjour有回调两个serviceFound和serviceResolved.如果我在设备发布某种服务的IP地址只是感兴趣,有没有获得比通过两个要去的地址更快/更有效的方式serviceFound和serviceResolved?
谢谢
我正在构建一个iOS应用程序,要求用户使用服务器端Web流通过Oauth2授权Google API.我目前打开一个UIWebView来启动oauth2流程.
这在模拟器中工作正常,因为我正在设置重定向URI http://localhost并在本地计算机上运行服务器.
但是,我还想在连接到桌面上运行的服务器的同时在设备上进行测试.为了做到这一点,我已经让应用程序发现我的桌面地址(本地子网IP或bonjour地址http://foo.local.)连接到服务器.但是,Google Oauth2流程表示它不能将本地URI用作重定向网址.
有没有办法解决?如果可能的话,我不想乱用我的本地网络设置或IOS设备的代理请求.理想情况下,我也希望能够使用bonjour服务来发现服务器,因为我们有一个开发人员团队,我们的应用程序允许您选择本地网络上您想要连接的服务器.
选项?
我从Apple的网站上下载了WiTap Code.它用于通过本地wifi网络传输数据.我正在一个项目中作为客户端 - 服务器架构进行交互.我正在从客户端向服务器发送NSData.
我做了两个项目; 一个用于客户端,一个用于服务器
在客户端项目,我做了以下更改为此我通过添加以下方法修改了AppController.m文件
AppController.m(客户端)
- (void)sendData:(NSData*)pobjData
{
assert(self.streamOpenCount == 2);
if ( [self.outputStream hasSpaceAvailable] )
{
NSInteger bytesWritten;
NSUInteger length = [pobjData length];
bytesWritten = [self.outputStream write:[pobjData bytes] maxLength:[pobjData length]];
NSLog(@"written bytes -> %d",bytesWritten);
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用此方法我发送数据.
在服务器端项目,我做了以下chagnes,我通过修改以下方法修改了AppController.m文件
AppController.m(服务器端)
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
#pragma unused(stream)
switch(eventCode) {
case NSStreamEventOpenCompleted: {
self.streamOpenCount += 1;
assert(self.streamOpenCount <= 2);
// Once both streams are open we hide the picker and the game is …Run Code Online (Sandbox Code Playgroud) 查看所有域并不是问题,但我找不到在网络上查找任何服务的正确方法.
我正在尝试使用以下代码将NSNetService(名为"My_Mac")解析为后台应用程序中的IP:
NSNetService *service = [[NSNetService alloc] initWithDomain:@"local." type:@"_daap._tcp" name:@"My_Mac"];
[service setDelegate:self];
[service resolveWithTimeout:5];
Run Code Online (Sandbox Code Playgroud)
在同一个类中,我定义了这些委托方法:
- (void)netServiceDidResolveAddress:(NSNetService *)sender
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict
Run Code Online (Sandbox Code Playgroud)
这是一个奇怪的部分:除非我在"[service resolveWithTimeout:5];"之后运行NSAlert,否则不会调用委托方法.有任何想法吗?
我想在p2p游戏中使用自定义界面连接其他iDevices.我知道我可以使用GKSession和GKSessionDelegate或使用较低级别的Bonjour浏览.但他们俩都会通过蓝牙和wifi搜索设备.
我只想列出蓝牙设备.我知道这在过去被回答为不可能,但飞行控制应用程序似乎能够做到这一点.
bonjour ×10
iphone ×5
ios ×3
cocoa ×2
macos ×2
api ×1
bluetooth ×1
c ×1
cocoa-touch ×1
dns-sd ×1
gamekit ×1
google-oauth ×1
jmdns ×1
mdns ×1
networking ×1
nsnetservice ×1
nsstream ×1
oauth-2.0 ×1
objective-c ×1
p2p ×1