标签: bonjour

在Yosemite 10.10升级后,Codekit 2无法解析Bonjour主机名

通过AppStore升级到Yosemite 10.10(没有新的/干净安装)后,在使用Codekit 2预览网站时,我得到一个空白页面.在"服务器"选项卡中,我的案例中的Bonjour主机名"lukas.local"缺失,因为升级http://goo.gl/QduPqp.

有关如何再次正确公开我的Bonjour主机名的任何想法?谢谢!

bonjour codekit osx-yosemite

8
推荐指数
1
解决办法
3472
查看次数

NAT端口转发的最佳选择是什么?

我想让用户轻松将NAT上的端口转发到我的C++应用程序的本地机器上.我想在OSX和Windows上做这个工作.Linux将是一个很好的奖励,但Linux用户可能更容易手动转发端口,所以它不是一个问题.LGPL类型代码没问题,但我不能使用任何直接GPL.

我很想听听任何人在这个领域有过的想法或经历,但我想到了一些具体的问题:

  • UPNP是否有公认的最佳图书馆?该MiniUPNP客户端看起来可能会奏效,但还有什么在那里?
  • Bonjour怎么样?我可以将它用于OSX计算机吗?
  • 所有大型的bittorrent应用程序都必须处理这个问题,所以现有的调查是如何进行的吗?Skype怎么样?

tcp bonjour upnp nat portforwarding

7
推荐指数
1
解决办法
1995
查看次数

为什么mDNS(Bonjour,Avahi等)使用UDP?

在我看来,DNS的许多问题,特别是安全问题,都是通过UDP实现DNS的根本原因; 例如,响应者不必是他所说的那个人.

我不知道mDNS协议的细节(我假设它比DNS更新),也许它在应用程序级别处理这些问题.任何人都可以为我阐明这一点吗?

security udp mdns bonjour

7
推荐指数
2
解决办法
4057
查看次数

如何在Erlang中发送多播消息并重用端口?

我的程序是我的第一个真正的Erlang程序,我已经有了一个良好的开端.我让它听取消息,阅读它们并解析它们.我也发送它们.困扰我的一件小事是我不能在5353号港口发送,我已经尝试了一切.我的机器上的所有其他应用程序都可以通过端口5353,SubEthaEdit,iTunes,iChat进行监听和发送.

解决方案必须在端口5353上广播发送,这就是原因.

"如果收到的多播DNS查询中的源UDP端口不是端口5353,则表示发起查询的客户端是一个不能完全实现所有多播DNS的简单客户端.在这种情况下,多播DNS响应者必须发送一个UDP响应通过单播直接返回到客户端查询数据包的源IP地址和端口.这种单播响应必须是传统的单播DNS服务器生成的传统单播响应;例如,它必须重复查询ID以及查询包中给出的问题."

它们都在发送多播消息时报告端口:5353.我真的希望我的应用程序玩得很好并做同样的事情,发送端口5353.这是我现在的模块.

-module(zeroconf).

-include("zeroconf.hrl").

-export([open/0,start/0]).
-export([stop/1,receiver/0]).
-export([send/1]).

-define(ADDR, {224,0,0,251}).
-define(PORT, 5353).

send(Domain) ->
    {ok,S} = gen_udp:open(0,[{broadcast,true}]), % I really want this Port to be 5353 :-(
    % this doesn't complain or throw errors but it also doesn't work :-(        
    %{ok,S} = gen_udp:open(?PORT,[{reuseaddr,true}, {ip,?ADDR}, {broadcast,true},multicast_ttl,4}, {multicast_loop,false}, binary]),
    P = #dns_rec{header=#dns_header{},qdlist=[#dns_query{domain=Domain,type=ptr,class=in}]},
    gen_udp:send(S,?ADDR,?PORT,inet_dns:encode(P)),
    gen_udp:close(S).
Run Code Online (Sandbox Code Playgroud)

这是一些输出的样子.

这是来自SubEthaEdit的QUERY,在本地网络上查找其他实例,请注意它显示Port:5353

From: {192,168,0,105}
Port: 5353
Data: {ok,{dns_rec,{dns_header,0,true,'query',true,false,false,false,false,0},
                   [],
                   [{dns_rr,"_see._tcp.local",ptr,in,0,0,
                            "jhr@Blackintosh._see._tcp.local",undefined,[],
                            false}],
                   [],[]}}
Run Code Online (Sandbox Code Playgroud)

现在这是我的模块中查询本地网络上的iTunes实例,注意它说Port:59795代码就像现在一样,该端口是随机的.我真的希望它是5353.

From: {192,168,0,105}
Port: 59795
Data: {ok,{dns_rec,{dns_header,0,false,'query',false,false,false,false,false,
                               0},
                   [{dns_query,"_daap._tcp.local",ptr,in}],
                   [],[],[]}}
Run Code Online (Sandbox Code Playgroud)

有没有人对UDP多播有任何神秘的见解?更新所以我可以尝试接受答案.我想我不能这样做.

erlang bonjour zeroconf multicast

7
推荐指数
1
解决办法
2436
查看次数

使用.NET的Apple的Bonjour服务?

我有一个通过Bonjour发布的iPhone应用程序.Mac对应物可以工作,它们可以同步和交换数据.现在我必须将那个小Mac应用程序移植到Windows.我决定使用.NET(因为这就是我所知道的).

该应用程序并不复杂,但我还处于早期阶段.我需要浏览/发现Bonjour服务.为此,我下载了Mono.Zeroconf和Apple的最新SDK(其中包括几个C#样本).

我并没有真正粘贴代码,因为我真的要复制/粘贴样本.实际上,Mono.Zeroconf有一个MZClient.exe,可用于测试"所有API".

我的第一个测试是 - 在同一个盒子里 - 打开两个cmd.exe并启动一个MZclient注册服务,另一个,启动它并"发现它".

它不起作用.

这是服务器:

C:\MZ>MZClient -v -p "_http._tcp 80 mysimpleweb”

*** Registering name = 'mysimpleweb', type = '_http._tcp', domain = 'local.'
*** Registered name = ‘mysimpleweb’
Run Code Online (Sandbox Code Playgroud)

在另一个终端:

c:\MZ>MZClient -v -t "_http._tcp"
Creating a ServiceBrowser with the following settings:
  Interface         = 0 (All)
  Address Protocol  = Any
  Domain            = local
  Registration Type = _http._tcp
  Resolve Shares    = False

Hit ^C when you're bored waiting for responses.
Run Code Online (Sandbox Code Playgroud)

就是这样.什么都没发生.我当然试过不同的服务无济于事.甚至玩那个领域的东西.记住这是同一个盒子.我尝试了另一台计算机,因为这是OSX中的一个虚拟机,所以我继续尝试了一个"纯粹的"胜利XP.没有.

注意:我有Apple Bonjour服务(启动并运行)以及Apple SDK(稍后安装).

鉴于这不起作用,我继续并决定尝试使用具有Interop和一些预编译样本(及其源代码)的Apple SDK.

简短的故事,mDSNBrowser.exe和SimpleChat.exe都不工作/查看/发现任何东西.

我的盒子是Parallels下的Win7,但这似乎并没有影响任何东西,因为原生XP表现出同样的问题. …

.net c# bonjour

7
推荐指数
1
解决办法
7436
查看次数

如何创建一个从iOS应用程序通过WiFi网络接收数据的小型Mac应用程序?

我需要的是在这个Mac应用程序中有一个简单的屏幕,只需打印一个字符串,因为iPhone正在通过WiFi网络传输字符串.

该字符串只是来自用户在iPhone上上下调整的滑块的字符串值.数据将被发送到Mac应用程序,然后Mac应用程序将从WiFi网络接收此信号并简单地打印值.

这是一个持续的连接.我不想尝试同步一次.我正试图从Mac上听iPhone设备,看看当用户从iPhone应用程序上下滑动UISlider时,iPhone是否正在发送更多字符串.

我该如何创建客户端?我需要使用Bonjour吗?

iphone macos bonjour wifi ios

7
推荐指数
2
解决办法
1万
查看次数

将Apple的Windows Bonjour安装程序捆绑到我们的msi中

我被要求将Apple的Bonjour安装程序捆绑到我们自己的msi安装程序中,以便Bonjour自动安装在我们的软件旁边.有人这样做过吗?它似乎并不是微不足道的,因为msi安装程序不能包含和启动另一个.我假设我需要某种批处理文件来顺序运行这两个安装程序?

windows-installer bonjour wix

7
推荐指数
2
解决办法
719
查看次数

打开流后,NSNetServiceBrowser didRemoveService需要更长时间

我有以下代码用于发现网络上的服务:

[netServiceBrowser setDelegate: self]; 
[netServiceBrowser searchForServicesOfType: serviceType inDomain: domain];
Run Code Online (Sandbox Code Playgroud)

这导致调用这两种方法(查找服务和删除服务):

- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser 
         didFindService:(NSNetService*) netService ... {}

- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser 
         didRemoveService:(NSNetService*) netService ... {}
Run Code Online (Sandbox Code Playgroud)

这很好用.当我关闭设备时,我立即收到didRemoveService调用.

但是,当我打开流(输入,输出或两者)到设备时:

[netService getInputStream: &inputStream outputStream: &outputStream];

[inputStream setDelegate: self];
[outputStream setDelegate: self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
             forMode: NSDefaultRunLoopMode];
[inputStream open];

[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
              forMode:NSDefaultRunLoopMode];
[outputStream open];
Run Code Online (Sandbox Code Playgroud)

它突然需要NSNetServiceBrowser几乎一分钟来检测我关闭了设备
(调用didRemoveService需要一分钟).

我没有与之通信的设备(打开流)仍然会在我删除它们后立即调用didRemoveService.

更新: 这里有一些与我的问题相关的信息.

我跟Wireshark跑了一段路,注意到以下几点:

我在iPad模拟器中启动应用程序,应用程序启动NSNetServiceBrowser并检测打印机.之后,它打开输入/输出流到设备(通过机场快递,USB).打印机正在向我发送状态更新,当我点击应用程序中的测试按钮时,打印机开始打印.在Wireshark中,我看到了与打印机的所有通信.

现在,当我在iPad上启动完全相同的应用程序(并让iPad模拟器运行).应用程序也启动NSNetServiceBrowser,并检测打印机.打印机没有向我发送状态更新,当我点击测试按钮时,打印机没有打印.在Wireshark中,我看到了沟通.打印机或机场接收我的命令并发送ACK包.

一旦我杀死iPad模拟器应用程序,打印机就会开始打印我使用iPad发送的命令.似乎打开一个套接字阻止所有的bonjour事件,我怎么能防止这种情况发生?

更多信息:https://devforums.apple.com/message/541436

bonjour objective-c stream nsnetservice nsnetservicebrowser

7
推荐指数
1
解决办法
1366
查看次数

使用NSStream和基于Bonjour的NSNetServices对等获取连接的服务名称

我在另一台设备上获取连接的服务名称时遇到问题.我正在使用基于Bonjour的NSNetServices以及用于对等连接的输入和输出流.我有一个iPhone和iPad设备.当我尝试从iPhone连接到iPad时,在iPhone端代理回调:

- (void)netService:(NSNetService *)sender didAcceptConnectionWithInputStream:(NSInputStream *)inputStream outputStream:(NSOutputStream *)outputStream
Run Code Online (Sandbox Code Playgroud)

被叫.但这sender只是它自己的服务(iPhone),所以它没有给我任何信息.我认为它应该包含其他设备服务(iPad),因此我们可以将信息保存到我们连接的服务中.你知道我怎样才能得到连接的服务名称?

bonjour objective-c nsstream nsnetservice ios

7
推荐指数
0
解决办法
290
查看次数

Android和iOS dns-sd:如何进行跨平台服务发现?

在Android上,我这样做是用一个简单的attacched地图作为信息来创建一个服务广播

HashMap<String, String> record = new HashMap<>();
record.put("info, "my android info");    
WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo
        .newInstance("_myservice", "_tcp", record);
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, this.getMainLooper(), null);
manager.addLocalService(channel, serviceInfo, null);
Run Code Online (Sandbox Code Playgroud)

检索另一个信号

manager.setDnsSdResponseListeners(channel, this, this);

@Override
public void onDnsSdTxtRecordAvailable(String fullDomainName, Map<String, String> txtRecordMap, WifiP2pDevice srcDevice)
Run Code Online (Sandbox Code Playgroud)

在iOS上,它是相同的服务名称和信息地图

MCPeerID* _myPeerId=[[MCPeerID alloc] initWithDisplayName:@"my ios peer"];
NSDictionary* _serviceInfo=@{@"info": @"my ios info"};

MCNearbyServiceAdvertiser* _serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] 
         initWithPeer:_myPeerId discoveryInfo:_serviceInfo serviceType:@"myservice"];
_serviceAdvertiser.delegate=advertiseDelegate;

MCNearbyServiceBrowser* _serviceBrowser=[[MCNearbyServiceBrowser alloc] 
      initWithPeer:_myPeerId serviceType:@"myservice"];
_serviceBrowser.delegate=browserDelegate;

[_serviceAdvertiser startAdvertisingPeer];
[_serviceBrowser startBrowsingForPeers];
Run Code Online (Sandbox Code Playgroud)

和代表们

-(void)browser:(MCNearbyServiceBrowser *)browser …
Run Code Online (Sandbox Code Playgroud)

android bonjour dns-sd ios multipeer-connectivity

7
推荐指数
0
解决办法
585
查看次数